package cc.rengu.igas.bomp.core.service.trans;

import cc.rengu.igas.bomp.common.constant.BompAppParamConstant;
import cc.rengu.igas.bomp.common.constant.BompTreeNodeConstant;
import cc.rengu.igas.bomp.common.constant.TableNameConstant;
import cc.rengu.igas.bomp.common.dao.*;
import cc.rengu.igas.bomp.common.dao.impl.*;
import cc.rengu.igas.bomp.common.entity.*;
import cc.rengu.igas.bomp.common.enums.*;
import cc.rengu.igas.bomp.common.util.ChangeNextStatusUtil;
import cc.rengu.igas.bomp.common.util.CompareFieldsUtil;
import cc.rengu.igas.bomp.common.util.InitParamUtil;
import cc.rengu.igas.bomp.core.model.AlipayIntegration;
import cc.rengu.igas.bomp.core.model.EsbIntegration;
import cc.rengu.igas.bomp.core.model.VirtAcctIntegration;
import cc.rengu.igas.bomp.core.model.WechatIntegration;
import cc.rengu.igas.bomp.core.realize.MchntManageOperationService;
import cc.rengu.igas.bomp.core.realize.impl.MchntManageOperationServiceImpl;
import cc.rengu.igas.bomp.core.service.base.AuditService;
import cc.rengu.igas.bomp.facade.bean.BaseProdBean;
import cc.rengu.igas.bomp.facade.bean.MchntAuthCtrlInfoBean;
import cc.rengu.igas.bomp.facade.bean.MchntFeeInfoBean;
import cc.rengu.igas.bomp.facade.bean.MchntStageInfoBean;
import cc.rengu.igas.bomp.facade.enums.BompAuditOprTypeEnum;
import cc.rengu.igas.bomp.facade.enums.BompManageOprTypeEnum;
import cc.rengu.igas.bomp.facade.enums.BompMchntNatureEnum;
import cc.rengu.igas.bomp.facade.request.MchntProdInfoManageRequest;
import cc.rengu.igas.bomp.facade.response.MchntProdInfoManageResponse;
import cc.rengu.igas.channel.wechat.facade.request.CheckFailMsgPushRequest;
import cc.rengu.igas.channel.wechat.facade.request.MchntCheckPassMsgPushRequest;
import cc.rengu.oltp.service.common.constant.AppConfigConstant;
import cc.rengu.oltp.service.common.constant.AppParamConstant;
import cc.rengu.oltp.service.common.constant.TreeNodeConstant;
import cc.rengu.oltp.service.common.dao.SysParamMapper;
import cc.rengu.oltp.service.common.dao.impl.SysParamMapperImpl;
import cc.rengu.oltp.service.common.entity.SysParam;
import cc.rengu.oltp.service.common.enums.BaseProdEnum;
import cc.rengu.oltp.service.common.enums.ChannelEnum;
import cc.rengu.oltp.service.model.BizException;
import cc.rengu.oltp.service.model.BizResponse;
import cc.rengu.oltp.service.realize.DubboService;
import cc.rengu.oltp.service.realize.impl.DubboServiceImpl;
import cc.rengu.oltp.utility.util.*;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 商户产品信息管理.
 */
public class MchntProdInfoManageService extends AuditService {

    private static String DEFAULT_PROD_CODE = "DF";

    /**
     * 新增提交待审批
     */
    private static String CREATE_TO_COMMIT = "11";

    /**
     * 修改提交审批
     */
    private static String MODIFY_TO_COMMIT = "12";

    /* 基础产品 */
    private static String BASE_PROD_TYPE = "00";

    /* 标准产品 */
    private static String NORM_PROD_TYPE = "01";

    private static String ADD_OPR = "01";

    private static String MODIFY_OPR = "02";

    private static String DELETE_OPR = "04";


    @Override
    protected Object bizBeforeCust() throws Exception {
        MchntProdInfoManageRequest request = new MchntProdInfoManageRequest();
        ConvertUtil.convertOutput(request);
        return request;
    }

    @Override
    protected BizResponse bizProcessCust(Object request) throws Exception {

        MchntProdInfoManageRequest mchntProdInfoManageRequest = (MchntProdInfoManageRequest) request;
        rglog.debug(JSONObject.toJSONString(mchntProdInfoManageRequest));
        BizResponse<MchntProdInfoManageResponse> bizResponse = new BizResponse<>();
        MchntProdInfoManageResponse mchntProdInfoManageResponse = new MchntProdInfoManageResponse();
        XmlTreeUtil xmlTreeUtil = new XmlTreeUtil();

        MchntBaseInfoMapper mchntBaseInfoMapper = new MchntBaseInfoMapperImpl();
        //查询商户信息
        MchntBaseInfo mchntBaseInfo = mchntBaseInfoMapper.selectMchntBaseInfoByPrimaryKey(
                mchntProdInfoManageRequest.getHeader().getInstId(), mchntProdInfoManageRequest.getMchntNo());
        if (null == mchntBaseInfo) {
            rglog.error("管理商户产品信息失败, 根据商户号查询商户基本信息为空，instId:{},mchntNo:{}",
                    mchntProdInfoManageRequest.getHeader().getInstId(), mchntProdInfoManageRequest.getMchntNo());
            throw new BizException(RespCodeEnum.MCHNT_INFO_NOT_FOUND.getRespCode(), RespCodeEnum.MCHNT_INFO_NOT_FOUND.getRespDesc());
        }

        //拓展经理工号查询拓展经理微信号信息（managerOpenId）
        String managerId = mchntBaseInfo.getManagerId();
        ManagerInfoMapper managerInfoMapper = new ManagerInfoMapperImpl();
        List<ManagerInfo> managerInfoList = managerInfoMapper.selectBompManagerInfoByManagerId(mchntProdInfoManageRequest.getHeader().getInstId(), managerId);
        String managerOpenId = "";
        if (!CollectionUtils.isEmpty(managerInfoList)) {
            for (ManagerInfo managerInfo : managerInfoList) {
                if (StringUtil.isEmptyOrNull(managerInfo.getOpenId()) || "OPENID".equals(managerInfo.getOpenId())) {
                    continue;
                }
                managerOpenId = managerInfo.getOpenId();
                break;
            }
        }
        xmlTreeUtil.setXmlTreeStringValue("managerOpenId", managerOpenId);

        if (CREATE_TO_COMMIT.equals(mchntProdInfoManageRequest.getOprType())) {
            // 新增待提交 -> 新增待审核  新增多个产品数据
            cerateCommitMchntProdInfo(mchntProdInfoManageRequest, mchntBaseInfo);
        } else if (MODIFY_TO_COMMIT.equals(mchntProdInfoManageRequest.getOprType())) {
            //修改商户所有信息  提交审批商户信息  修改待提交审批/新增通过/修改通过/修改失败 -》 修改待审核
            modifyCommitMchntProdInfo(mchntProdInfoManageRequest, mchntBaseInfo);
        } else if (BompManageOprTypeEnum.AUDIT.getType().equals(mchntProdInfoManageRequest.getOprType())) {
            //审核商户基本信息
            if (BompAuditOprTypeEnum.AUDIT_PASS.getType().equals(mchntProdInfoManageRequest.getCheckStatus())) {
                auditPassMchntProdInfo(mchntProdInfoManageRequest, mchntBaseInfo);
            } else {
                auditRejuctMchntProdInfo(mchntProdInfoManageRequest, mchntBaseInfo);
            }
        }

        mchntProdInfoManageResponse.setRespCode(RespCodeEnum.TRANS_SUCCESS.getRespCode());
        mchntProdInfoManageResponse.setRespDesc(RespCodeEnum.TRANS_SUCCESS.getRespDesc());
        bizResponse.setResult(mchntProdInfoManageResponse);
        bizResponse.setRespCode(RespCodeEnum.TRANS_SUCCESS.getRespCode());
        bizResponse.setRespDesc(RespCodeEnum.TRANS_SUCCESS.getRespDesc());
        bizResponse.setRspSysId(AppParamConstant.SYS_ID);
        return bizResponse;
    }


    /**
     * 审核商户信息
     * 新增待审核 -》 新增拒绝
     * 修改待审核 -》 修改拒绝
     *
     * @param request 请求
     * @throws Exception 异常
     */
    private void auditRejuctMchntProdInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo) throws Exception {
        List<MchntProdInfo> totalMchntProdInfoList = new ArrayList<>();
        List<MchntFeeInfo> totalFeeInfoList = new ArrayList<>();
        List<MchntStageInfo> totalStageInfoList = new ArrayList<>();
        List<MchntAuthCtrl> totalAuthCtrlList = new ArrayList<>();
        List<BizTmp> totalBizTmpList = new ArrayList<>();
        List<MchntAcctInfo> totalAcctInfoList = new ArrayList<>();
        List<MchntImageInfo> totalImageInfoList = new ArrayList<>();
        XmlTreeUtil xmlTreeUtil = new XmlTreeUtil();

        String instId = mchntBaseInfo.getInstId();
        String mchntNo = mchntBaseInfo.getMchntNo();


        if (!ChangeNextStatusUtil.isAllowAuditData(mchntBaseInfo.getAuditStatus())) {
            rglog.error("当前状态不允许进行审核操作！ currentStatus:{}", mchntBaseInfo.getAuditStatus());
            throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
        }

        String auditStatus = ChangeNextStatusUtil.getNextAuditStatus(mchntBaseInfo.getAuditStatus(), BompAuditOprTypeEnum.AUDIT_REJECT.getType());
        String bizOpr = "R";
        String updateTime = DateUtil.getCurrentDateTime(InitParamUtil.yyyy_MM_dd_HHmmssSSS);

        BizTmpMapper bizTmpMapper = new BizTmpMapperImpl();

        //获取商户基础信息
        BizTmp baseInfoBiz = bizTmpMapper.selectBizTmpByRealId(mchntBaseInfo.getInstId(), mchntBaseInfo.getId());
        mchntBaseInfo.setAuditStatus(auditStatus);
        mchntBaseInfo.setLastAuditId(request.getUserId());
        mchntBaseInfo.setLastAuditTime(updateTime);
        mchntBaseInfo.setLastUpdateTime(updateTime);
        mchntBaseInfo.setAuditRefuseReason(request.getAuditRefuseReason());
        InitParamUtil.initBizTempData(baseInfoBiz, JSONObject.toJSONString(mchntBaseInfo));
        baseInfoBiz.setAuditStatus(auditStatus);
        baseInfoBiz.setLastAuditId(request.getUserId());
        baseInfoBiz.setLastAuditTime(updateTime);
        baseInfoBiz.setLastUpdateTime(updateTime);
        baseInfoBiz.setBizOpr(bizOpr);
        baseInfoBiz.setAuditRefuseReason(request.getAuditRefuseReason());
        totalBizTmpList.add(baseInfoBiz);

        //独立维护商户
        MchntSignInfoMapper mchntSignInfoMapper = new MchntSignInfoMapperImpl();
        MchntSignInfo dbMchntSignInfo = mchntSignInfoMapper.selectMchntSignInfoByPrimaryKey(instId, mchntNo);
        BizTmp signBizTmp = bizTmpMapper.selectBizTmpByRealId(dbMchntSignInfo.getInstId(), dbMchntSignInfo.getId());

        String signJson = InitParamUtil.getJsonString(signBizTmp);
        MchntSignInfo rejectSignTmp = JSON.parseObject(signJson, MchntSignInfo.class);
        rejectSignTmp.setAuditStatus(auditStatus);
        InitParamUtil.initBizTempData(signBizTmp, JSONObject.toJSONString(rejectSignTmp));

        dbMchntSignInfo.setAuditStatus(auditStatus);
        dbMchntSignInfo.setLastAuditId(request.getUserId());
        dbMchntSignInfo.setLastUpdateTime(updateTime);
        dbMchntSignInfo.setLastAuditTime(updateTime);
        signBizTmp.setAuditStatus(auditStatus);
        signBizTmp.setLastOprId(request.getUserId());
        signBizTmp.setLastAuditTime(updateTime);
        signBizTmp.setLastUpdateTime(updateTime);
        signBizTmp.setBizOpr(bizOpr);
        totalBizTmpList.add(signBizTmp);


        MchntImageInfoMapper mchntImageInfoMapper = new MchntImageInfoMapperImpl();

        //修改映像信息 -> 新增待审核
        List<BizTmp> mchntImageInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_IMAGE_INFO);
        if (!CollectionUtils.isEmpty(mchntImageInfoBizTmpList)) {
            for (BizTmp mchntImageInfoBizTmp : mchntImageInfoBizTmpList) {
                String imageJson = InitParamUtil.getJsonString(mchntImageInfoBizTmp);
                MchntImageInfo modifyImageInfo = JSON.parseObject(imageJson, MchntImageInfo.class);
                modifyImageInfo.setAuditStatus(auditStatus);
                modifyImageInfo.setLastUpdateTime(updateTime);

                MchntImageInfo dbImageInfo = mchntImageInfoMapper.selectMchntImageInfoById(instId, modifyImageInfo.getId());
                if (null != dbImageInfo) {
                    dbImageInfo.setAuditStatus(auditStatus);
                    dbImageInfo.setLastAuditId(request.getUserId());
                    dbImageInfo.setLastUpdateTime(updateTime);
                    dbImageInfo.setLastAuditTime(updateTime);
                    totalImageInfoList.add(dbImageInfo);
                }

                mchntImageInfoBizTmp.setAuditStatus(auditStatus);
                mchntImageInfoBizTmp.setLastOprId(request.getUserId());
                mchntImageInfoBizTmp.setLastAuditTime(updateTime);
                mchntImageInfoBizTmp.setLastUpdateTime(updateTime);
                mchntImageInfoBizTmp.setBizOpr(bizOpr);
                InitParamUtil.initBizTempData(mchntImageInfoBizTmp, JSONObject.toJSONString(modifyImageInfo));
                totalBizTmpList.add(mchntImageInfoBizTmp);
            }
        }

        if (BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {

            //连锁商户门店 非独立维护商户
            commitByNoIndependentMchnt(xmlTreeUtil, mchntBaseInfo, dbMchntSignInfo, totalImageInfoList, totalBizTmpList, null);

        } else {
            MchntAcctInfoMapper mchntAcctInfoMapper = new MchntAcctInfoMapperImpl();
            List<BizTmp> mchntAcctInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_ACCT_INFO);
            if (!CollectionUtils.isEmpty(mchntAcctInfoBizTmpList)) {
                for (BizTmp mchntAcctInfoBizTmp : mchntAcctInfoBizTmpList) {
                    String rejectAcctJson = InitParamUtil.getJsonString(mchntAcctInfoBizTmp);
                    MchntAcctInfo rejectMchntAcctInfo = JSON.parseObject(rejectAcctJson, MchntAcctInfo.class);

                    MchntAcctInfo mchntAcctInfo = mchntAcctInfoMapper.selectMchntAcctInfoById(instId, rejectMchntAcctInfo.getId());
                    if (null != mchntAcctInfo) {
                        //原有结算账户信息
                        mchntAcctInfo.setAuditStatus(auditStatus);
                        mchntAcctInfo.setLastAuditId(request.getUserId());
                        mchntAcctInfo.setLastUpdateTime(updateTime);
                        mchntAcctInfo.setLastAuditTime(updateTime);
                        totalAcctInfoList.add(mchntAcctInfo);
                    }
                    rejectMchntAcctInfo.setAuditStatus(auditStatus);
                    rejectMchntAcctInfo.setLastAuditId(request.getUserId());
                    rejectMchntAcctInfo.setLastUpdateTime(updateTime);
                    rejectMchntAcctInfo.setLastAuditTime(updateTime);

                    mchntAcctInfoBizTmp.setAuditStatus(auditStatus);
                    mchntAcctInfoBizTmp.setLastOprId(request.getUserId());
                    mchntAcctInfoBizTmp.setLastAuditTime(updateTime);
                    mchntAcctInfoBizTmp.setLastUpdateTime(updateTime);
                    mchntAcctInfoBizTmp.setBizOpr(bizOpr);
                    InitParamUtil.initBizTempData(mchntAcctInfoBizTmp, JSONObject.toJSONString(rejectMchntAcctInfo));
                    totalBizTmpList.add(mchntAcctInfoBizTmp);
                }
            }

            List<BizTmp> bizProdTmps = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_PROD_INFO);
            if (!CollectionUtils.isEmpty(bizProdTmps)) {
                bizProdTmps = bizProdTmps.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(bizProdTmps)) {
                    List<MchntProdInfo> bizProdList = bizProdTmps.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntProdInfo.class)).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(bizProdList)) {
                        MchntProdInfoMapper mchntProdInfoMapper = new MchntProdInfoMapperImpl();
                        for (MchntProdInfo mchntProdInfo : bizProdList) {
                            MchntProdInfo dbProdInfo = mchntProdInfoMapper.selectMchntProdInfoById(mchntBaseInfo.getInstId(), mchntProdInfo.getId());

                            if (null != dbProdInfo) {
                                //只改待处理的状态
                                //商户费率信息表
                                dbProdInfo.setAuditStatus(auditStatus);
                                dbProdInfo.setLastOprId(request.getUserId());
                                dbProdInfo.setLastUpdateTime(updateTime);
                                dbProdInfo.setLastAuditTime(updateTime);
                                totalMchntProdInfoList.add(dbProdInfo);
                                //费率业务临时信息
                                Optional<BizTmp> match = bizProdTmps.stream().filter(item -> item.getRealId().equals(dbProdInfo.getId())).findFirst();
                                BizTmp bizProdTmp = match.get();
                                bizProdTmp.setAuditStatus(auditStatus);
                                bizProdTmp.setLastOprId(request.getUserId());
                                bizProdTmp.setLastUpdateTime(updateTime);
                                bizProdTmp.setLastAuditTime(updateTime);
                                bizProdTmp.setBizOpr(bizOpr);
                                InitParamUtil.initBizTempData(bizProdTmp, JSONObject.toJSONString(dbProdInfo));
                                totalBizTmpList.add(bizProdTmp);
                            } else {
                                //费率业务临时信息 新增的费率
                                mchntProdInfo.setAuditStatus(auditStatus);
                                mchntProdInfo.setLastOprId(request.getUserId());
                                mchntProdInfo.setLastUpdateTime(updateTime);
                                mchntProdInfo.setLastAuditTime(updateTime);
                                mchntProdInfo.setRecordStatus(AppParamConstant.NO);
                                Optional<BizTmp> match = bizProdTmps.stream().filter(item -> item.getRealId().equals(mchntProdInfo.getId())).findFirst();
                                BizTmp bizProdTmp = match.get();
                                bizProdTmp.setAuditStatus(auditStatus);
                                bizProdTmp.setLastOprId(request.getUserId());
                                bizProdTmp.setLastUpdateTime(updateTime);
                                bizProdTmp.setLastAuditTime(updateTime);
                                InitParamUtil.initBizTempData(bizProdTmp, JSONObject.toJSONString(mchntProdInfo));
                                totalBizTmpList.add(bizProdTmp);
                            }
                        }
                    }
                }
            }


            List<BizTmp> bizFeeTmps = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_FEE_INFO);
            if (!CollectionUtils.isEmpty(bizFeeTmps)) {
                bizFeeTmps = bizFeeTmps.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(bizFeeTmps)) {
                    List<MchntFeeInfo> bizFeeList = bizFeeTmps.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntFeeInfo.class)).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(bizFeeList)) {
                        MchntFeeInfoMapper mchntFeeInfoMapper = new MchntFeeInfoMapperImpl();
                        for (MchntFeeInfo mchntFeeInfo : bizFeeList) {
                            MchntFeeInfo dbFeeInfo = mchntFeeInfoMapper.selectMchntFeeInfoById(instId, mchntFeeInfo.getId());
                            if (null != dbFeeInfo) {
                                //只改待处理的状态
                                //商户费率信息表
                                dbFeeInfo.setAuditStatus(auditStatus);
                                dbFeeInfo.setLastOprId(request.getUserId());
                                dbFeeInfo.setLastUpdateTime(updateTime);
                                dbFeeInfo.setLastAuditTime(updateTime);
                                totalFeeInfoList.add(dbFeeInfo);
                                //费率业务临时信息
                                Optional<BizTmp> match = bizFeeTmps.stream().filter(item -> item.getRealId().equals(dbFeeInfo.getId())).findFirst();
                                BizTmp bizFeeTmp = match.get();
                                bizFeeTmp.setAuditStatus(auditStatus);
                                bizFeeTmp.setLastOprId(request.getUserId());
                                bizFeeTmp.setLastUpdateTime(updateTime);
                                bizFeeTmp.setLastAuditTime(updateTime);
                                bizFeeTmp.setBizOpr(bizOpr);
                                InitParamUtil.initBizTempData(bizFeeTmp, JSONObject.toJSONString(dbFeeInfo));
                                totalBizTmpList.add(bizFeeTmp);
                            } else {
                                //费率业务临时信息 新增的费率
                                mchntFeeInfo.setAuditStatus(auditStatus);
                                mchntFeeInfo.setLastOprId(request.getUserId());
                                mchntFeeInfo.setLastUpdateTime(updateTime);
                                mchntFeeInfo.setLastAuditTime(updateTime);
                                mchntFeeInfo.setRecordStatus(AppParamConstant.NO);
                                Optional<BizTmp> match = bizFeeTmps.stream().filter(item -> item.getRealId().equals(mchntFeeInfo.getId())).findFirst();
                                BizTmp bizFeeTmp = match.get();
                                bizFeeTmp.setAuditStatus(auditStatus);
                                bizFeeTmp.setLastOprId(request.getUserId());
                                bizFeeTmp.setLastUpdateTime(updateTime);
                                bizFeeTmp.setLastAuditTime(updateTime);
                                InitParamUtil.initBizTempData(bizFeeTmp, JSONObject.toJSONString(mchntFeeInfo));
                                totalBizTmpList.add(bizFeeTmp);
                            }
                        }
                    }
                }
            }

            List<BizTmp> authTmps = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_AUTH_CTRL);
            if (!CollectionUtils.isEmpty(authTmps)) {
                authTmps = authTmps.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(authTmps)) {
                    List<MchntAuthCtrl> bizAuthList = authTmps.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntAuthCtrl.class)).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(bizAuthList)) {
                        MchntAuthCtrlMapper mchntAuthCtrlMapper = new MchntAuthCtrlMapperImpl();
                        for (MchntAuthCtrl mchntAuthCtrl : bizAuthList) {
                            MchntAuthCtrl dbAuthInfo = mchntAuthCtrlMapper.selectMchntAuthCtrlInfoById(instId, mchntAuthCtrl.getId());
                            if (null != dbAuthInfo) {
                                //只改待处理的状态
                                //商户权限信息表
                                dbAuthInfo.setAuditStatus(auditStatus);
                                dbAuthInfo.setLastOprId(request.getUserId());
                                dbAuthInfo.setLastUpdateTime(updateTime);
                                dbAuthInfo.setLastAuditTime(updateTime);
                                totalAuthCtrlList.add(dbAuthInfo);
                                //费率业务临时信息
                                Optional<BizTmp> match = authTmps.stream().filter(item -> item.getRealId().equals(dbAuthInfo.getId())).findFirst();
                                BizTmp bizAuth = match.get();

                                bizAuth.setAuditStatus(auditStatus);
                                bizAuth.setLastOprId(request.getUserId());
                                bizAuth.setLastUpdateTime(updateTime);
                                bizAuth.setLastAuditTime(updateTime);
                                bizAuth.setBizOpr(bizOpr);
                                //审核拒绝，则与正式表保持一致
                                InitParamUtil.initBizTempData(bizAuth, JSONObject.toJSONString(dbAuthInfo));
                                totalBizTmpList.add(bizAuth);
                            } else {
                                //费率业务临时信息 新增的费率
                                mchntAuthCtrl.setAuditStatus(auditStatus);
                                mchntAuthCtrl.setLastOprId(request.getUserId());
                                mchntAuthCtrl.setLastUpdateTime(updateTime);
                                mchntAuthCtrl.setLastAuditTime(updateTime);
                                mchntAuthCtrl.setSupportFlag(AppParamConstant.NO);

                                Optional<BizTmp> match = authTmps.stream().filter(item -> item.getRealId().equals(mchntAuthCtrl.getId())).findFirst();
                                BizTmp bizAuth = match.get();
                                bizAuth.setAuditStatus(auditStatus);
                                bizAuth.setLastOprId(request.getUserId());
                                bizAuth.setLastUpdateTime(updateTime);
                                bizAuth.setLastAuditTime(updateTime);
                                InitParamUtil.initBizTempData(bizAuth, JSONObject.toJSONString(mchntAuthCtrl));
                                totalBizTmpList.add(bizAuth);
                            }
                        }
                    }
                }
            }


            //商户分期信息
            List<BizTmp> bizStageTmps = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_STAGE_INFO);
            if (!CollectionUtils.isEmpty(bizStageTmps)) {
                bizStageTmps = bizStageTmps.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(bizStageTmps)) {
                    List<MchntStageInfo> bizStageList = bizStageTmps.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntStageInfo.class)).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(bizStageList)) {
                        MchntStageInfoMapper mchntStageInfoMapper = new MchntStageInfoMapperImpl();
                        for (MchntStageInfo mchntStageInfo : bizStageList) {
                            MchntStageInfo dbStageInfo = mchntStageInfoMapper.selectMchntStageInfoById(instId, mchntStageInfo.getId());
                            if (null != dbStageInfo) {
                                //只改待处理的状态
                                //商户费率信息表
                                dbStageInfo.setAuditStatus(auditStatus);
                                dbStageInfo.setLastOprId(request.getUserId());
                                dbStageInfo.setLastUpdateTime(updateTime);
                                dbStageInfo.setLastAuditTime(updateTime);
                                totalStageInfoList.add(dbStageInfo);
                                //费率业务临时信息
                                Optional<BizTmp> match = bizStageTmps.stream().filter(item -> item.getRealId().equals(mchntStageInfo.getId())).findFirst();
                                BizTmp stageTmp = match.get();
                                stageTmp.setAuditStatus(auditStatus);
                                stageTmp.setLastOprId(request.getUserId());
                                stageTmp.setLastUpdateTime(updateTime);
                                stageTmp.setLastAuditTime(updateTime);
                                stageTmp.setBizOpr(bizOpr);
                                totalBizTmpList.add(stageTmp);
                            } else {
                                //费率业务临时信息 新增的费率
                                mchntStageInfo.setAuditStatus(auditStatus);
                                mchntStageInfo.setLastOprId(request.getUserId());
                                mchntStageInfo.setLastUpdateTime(updateTime);
                                mchntStageInfo.setLastAuditTime(updateTime);
                                mchntStageInfo.setRecordStatus(AppParamConstant.NO);
                                Optional<BizTmp> match = bizStageTmps.stream().filter(item -> item.getRealId().equals(mchntStageInfo.getId())).findFirst();
                                BizTmp stageTmp = match.get();
                                stageTmp.setAuditStatus(auditStatus);
                                stageTmp.setLastOprId(request.getUserId());
                                stageTmp.setLastUpdateTime(updateTime);
                                stageTmp.setLastAuditTime(updateTime);
                                InitParamUtil.initBizTempData(stageTmp, JSONObject.toJSONString(mchntStageInfo));
                                totalBizTmpList.add(stageTmp);
                            }
                        }
                    }
                }
            }

            WechatMchntInfoMapper wechatMchntInfoMapper = new WechatMchntInfoMapperImpl();
            WechatMchntInfo wechatMchntInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntNo);
            if (null != wechatMchntInfo) {
                BizTmp wechatMchntBizTmp = bizTmpMapper.selectBizTmpByRealId(wechatMchntInfo.getInstId(), wechatMchntInfo.getId());

                wechatMchntInfo.setAuditStatus(auditStatus);
                wechatMchntInfo.setLastAuditId(request.getUserId());
                wechatMchntInfo.setLastUpdateTime(updateTime);
                wechatMchntInfo.setLastUpdateTime(updateTime);

                wechatMchntBizTmp.setAuditStatus(auditStatus);
                wechatMchntBizTmp.setLastAuditId(request.getUserId());
                wechatMchntBizTmp.setLastAuditTime(updateTime);
                wechatMchntBizTmp.setLastUpdateTime(updateTime);
                wechatMchntBizTmp.setBizOpr(bizOpr);
                totalBizTmpList.add(wechatMchntBizTmp);
            } else {
                List<BizTmp> wechatMchntBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntNo, TableNameConstant.T_B_WECHAT_MCHNT_INFO);
                if (!CollectionUtils.isEmpty(wechatMchntBizTmpList)) {
                    BizTmp wechatMchntBizTmp = wechatMchntBizTmpList.get(0);
                    wechatMchntBizTmp.setAuditStatus(auditStatus);
                    wechatMchntBizTmp.setLastAuditId(request.getUserId());
                    wechatMchntBizTmp.setLastAuditTime(updateTime);
                    wechatMchntBizTmp.setLastUpdateTime(updateTime);
                    wechatMchntBizTmp.setBizOpr(bizOpr);
                    totalBizTmpList.add(wechatMchntBizTmp);
                }
            }

            AlipayMchntInfoMapper alipayMchntInfoMapper = new AlipayMchntInfoMapperImpl();
            AlipayMchntInfo alipayMchntInfo = alipayMchntInfoMapper.selectAlipayMchntInfoByPrimaryKey(instId, mchntNo);
            if (null != alipayMchntInfo) {
                BizTmp alipayMchntBizTmp = bizTmpMapper.selectBizTmpByRealId(alipayMchntInfo.getInstId(), alipayMchntInfo.getId());

                alipayMchntInfo.setAuditStatus(auditStatus);
                alipayMchntInfo.setLastAuditId(request.getUserId());
                alipayMchntInfo.setLastUpdateTime(updateTime);
                alipayMchntInfo.setLastAuditTime(updateTime);

                alipayMchntBizTmp.setAuditStatus(auditStatus);
                alipayMchntBizTmp.setLastAuditId(request.getUserId());
                alipayMchntBizTmp.setLastAuditTime(updateTime);
                alipayMchntBizTmp.setLastUpdateTime(updateTime);
                alipayMchntBizTmp.setBizOpr(bizOpr);
                totalBizTmpList.add(alipayMchntBizTmp);
            } else {
                List<BizTmp> alipayMchntBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntNo, TableNameConstant.T_B_ALPAY_MCHNT_INFO);
                if (!CollectionUtils.isEmpty(alipayMchntBizTmpList)) {
                    BizTmp alipayMchntBizTmp = alipayMchntBizTmpList.get(0);
                    alipayMchntBizTmp.setAuditStatus(auditStatus);
                    alipayMchntBizTmp.setLastAuditId(request.getUserId());
                    alipayMchntBizTmp.setLastAuditTime(updateTime);
                    alipayMchntBizTmp.setLastUpdateTime(updateTime);
                    alipayMchntBizTmp.setBizOpr(bizOpr);
                    totalBizTmpList.add(alipayMchntBizTmp);
                }
            }

            CupsMchntInfoMapper cupsMchntInfoMapper = new CupsMchntInfoMapperImpl();
            CupsMchntInfo cupsMchntInfo = cupsMchntInfoMapper.selectCupsMchntInfoByPrimaryKey(instId, mchntNo);
            if (null != cupsMchntInfo) {
                BizTmp cupsMchntBizTmp = bizTmpMapper.selectBizTmpByRealId(cupsMchntInfo.getInstId(), cupsMchntInfo.getId());

                cupsMchntInfo.setAuditStatus(auditStatus);
                cupsMchntInfo.setLastAuditId(request.getUserId());
                cupsMchntInfo.setLastUpdateTime(updateTime);
                cupsMchntInfo.setLastAuditTime(updateTime);

                cupsMchntBizTmp.setAuditStatus(auditStatus);
                cupsMchntBizTmp.setLastOprId(request.getUserId());
                cupsMchntBizTmp.setLastAuditTime(updateTime);
                cupsMchntBizTmp.setLastUpdateTime(updateTime);
                cupsMchntBizTmp.setBizOpr(bizOpr);
                totalBizTmpList.add(cupsMchntBizTmp);

            }

            /* 将数据统一修改为 拒绝 */
            MchntManageOperationService mchntManageOperationService = new MchntManageOperationServiceImpl();
            mchntManageOperationService.modifyOrAuditMchntInfoDb(request, mchntBaseInfo, totalBizTmpList, null, totalMchntProdInfoList,
                    totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, wechatMchntInfo, alipayMchntInfo, cupsMchntInfo,
                    dbMchntSignInfo, totalAcctInfoList, totalImageInfoList);

            //异步调用审核拒绝拓展经理消息推送
            String pushOpenId = xmlTreeUtil.getXmlTreeStringValue("managerOpenId");
            if (!StringUtil.isEmptyOrNull(pushOpenId) && !"OPENID".equals(pushOpenId)) {
                CheckFailMsgPushRequest wxchatRequest = new CheckFailMsgPushRequest();
                cc.rengu.igas.channel.wechat.facade.base.Header wxchatHeader = new cc.rengu.igas.channel.wechat.facade.base.Header();
                wxchatHeader.setInstId(instId);
                wxchatHeader.setSrcSysId(AppParamConstant.SYS_ID);
                wxchatHeader.setChanlId(ChannelEnum.BOMP.getChannelType());
                wxchatHeader.setBizType("00");
                wxchatHeader.setVersion("1.0.0");
                wxchatHeader.setTxnNum("checkfail");
                wxchatHeader.setTraceNo(xmlTreeUtil.getXmlTreeStringValue(xmlTreeUtil.getXmlTreeStringValue(TreeNodeConstant.SYS_SEQ_NUM)));
                wxchatHeader.setTransDate(DateUtil.getCurrentDate());
                wxchatHeader.setTransTime(DateUtil.getCurrentTime());
                wxchatRequest.setHeader(wxchatHeader);
                wxchatRequest.setChannelId(ChannelEnum.WXZF.getChannelType());
                wxchatRequest.setContactPhoneNo(mchntBaseInfo.getMchntContactMobile());
                wxchatRequest.setMchntContact(mchntBaseInfo.getMchntContactName());
                wxchatRequest.setMchntName(mchntBaseInfo.getMchntName());
                wxchatRequest.setMchntNo(mchntBaseInfo.getMchntNo());
                wxchatRequest.setOpenId(pushOpenId);
                DubboService dubboService = new DubboServiceImpl();
                int dubboReturnCode = dubboService.asynCallDubboService("wechatMsgPushService", "checkFailMsgPush", wxchatRequest, null);
                if (0 != dubboReturnCode) {
                    rglog.error("商户审核不通过消息推送失败！");
                }
                //审核失败原因auditRefuseReason由于模板限制需要的话得拼接在模板最后一个字段 “商户电话” 之后
            }
        }

    }


    /**
     * 审核商户信息
     * 新增待审核 -》 新增成功
     * 修改待审核 -》 修改成功
     *
     * @param request 请求
     * @throws Exception 异常
     */
    private void auditPassMchntProdInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo) throws Exception {
        List<MchntProdInfo> totalMchntProdInfoList = new ArrayList<>();
        List<MchntFeeInfo> totalFeeInfoList = new ArrayList<>();
        List<MchntStageInfo> totalStageInfoList = new ArrayList<>();
        List<MchntAuthCtrl> totalAuthCtrlList = new ArrayList<>();
        List<BizTmp> totalBizTmpList = new ArrayList<>();
        List<BizHistory> totalBizHistoryList = new ArrayList<>();
        List<MchntAcctInfo> totalAcctInfoList = new ArrayList<>();
        List<MchntImageInfo> totalImageInfoList = new ArrayList<>();
        XmlTreeUtil xmlTreeUtil = new XmlTreeUtil();

        String instId = mchntBaseInfo.getInstId();
        String mchntNo = mchntBaseInfo.getMchntNo();

        if (!ChangeNextStatusUtil.isAllowAuditData(mchntBaseInfo.getAuditStatus())) {
            rglog.error("当前状态不允许进行审核操作！ currentStatus:{}", mchntBaseInfo.getAuditStatus());
            throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
        }

        String auditStatus = ChangeNextStatusUtil.getNextAuditStatus(mchntBaseInfo.getAuditStatus(), BompAuditOprTypeEnum.AUDIT_PASS.getType());

        String updateTime = DateUtil.getCurrentDateTime(InitParamUtil.yyyy_MM_dd_HHmmssSSS);

        BizTmpMapper bizTmpMapper = new BizTmpMapperImpl();

        //获取商户基础信息
        BizTmp baseInfoBiz = bizTmpMapper.selectBizTmpByRealId(mchntBaseInfo.getInstId(), mchntBaseInfo.getId());
        String passBaseInfoJson = InitParamUtil.getJsonString(baseInfoBiz);
        MchntBaseInfo auditPassMchntBaseInfo = JSON.parseObject(passBaseInfoJson, MchntBaseInfo.class);

//        String bizOpr = "P";
        String bizStatus = MchntStatusEnum.NORMAL.getStatus();
        if (AuditStatusEnum.ADD_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
            auditPassMchntBaseInfo.setMchntStatus(bizStatus);
            auditPassMchntBaseInfo.setMchntExpandTime(updateTime);
        } else if (AuditStatusEnum.CANCEL_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
            //撤销审核通过
            bizStatus = MchntStatusEnum.CANCEL.getStatus();
        } else if (AuditStatusEnum.STOP_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
            //停用商户审核通过
            bizStatus = MchntStatusEnum.DISUSE.getStatus();
        }
        auditPassMchntBaseInfo.setAuditStatus(auditStatus);
        auditPassMchntBaseInfo.setLastAuditId(request.getUserId());
        auditPassMchntBaseInfo.setLastUpdateTime(updateTime);
        auditPassMchntBaseInfo.setLastAuditTime(updateTime);
        auditPassMchntBaseInfo.setAuditRefuseReason(request.getAuditRefuseReason());
        baseInfoBiz.setAuditStatus(auditStatus);
        baseInfoBiz.setBizStatus(bizStatus);
        baseInfoBiz.setLastOprId(request.getUserId());
        baseInfoBiz.setLastAuditTime(updateTime);
        baseInfoBiz.setLastAuditId(request.getUserId());
        InitParamUtil.initBizTempData(baseInfoBiz, JSONObject.toJSONString(auditPassMchntBaseInfo));
        totalBizTmpList.add(baseInfoBiz);

        BizHistory bizHistoryBaseInfo = initBizHistoryByCreate(baseInfoBiz, CompareFieldsUtil.compareFields(mchntBaseInfo, auditPassMchntBaseInfo, null), updateTime);
        totalBizHistoryList.add(bizHistoryBaseInfo);

        //独立维护商户
        MchntSignInfoMapper mchntSignInfoMapper = new MchntSignInfoMapperImpl();
        MchntSignInfo dbMchntSignInfo = mchntSignInfoMapper.selectMchntSignInfoByPrimaryKey(instId, mchntNo);
        BizTmp signBizTmp = bizTmpMapper.selectBizTmpByRealId(dbMchntSignInfo.getInstId(), dbMchntSignInfo.getId());
        String passSignInfoJson = StringUtil.isEmptyOrNull(signBizTmp.getBizData2()) ? signBizTmp.getBizData1() : signBizTmp.getBizData1() + signBizTmp.getBizData2();
        passSignInfoJson = StringUtil.isEmptyOrNull(signBizTmp.getBizData3()) ? passSignInfoJson : passSignInfoJson + signBizTmp.getBizData3();
        MchntSignInfo auditPassMchntSignInfo = JSON.parseObject(passSignInfoJson, MchntSignInfo.class);
        auditPassMchntSignInfo.setAuditStatus(auditStatus);
        auditPassMchntSignInfo.setLastAuditId(request.getUserId());
        auditPassMchntSignInfo.setLastUpdateTime(updateTime);
        auditPassMchntSignInfo.setLastAuditTime(updateTime);
        signBizTmp.setAuditStatus(auditStatus);
        signBizTmp.setBizStatus(bizStatus);
        signBizTmp.setLastOprId(request.getUserId());
        signBizTmp.setLastAuditTime(updateTime);
        signBizTmp.setLastUpdateTime(updateTime);
        InitParamUtil.initBizTempData(signBizTmp, JSONObject.toJSONString(auditPassMchntSignInfo));
        signBizTmp.setLastAuditId(request.getUserId());
        totalBizTmpList.add(signBizTmp);
        BizHistory bizHistorySignInfo = initBizHistoryByCreate(signBizTmp, CompareFieldsUtil.compareFields(dbMchntSignInfo, auditPassMchntSignInfo, null), updateTime);
        totalBizHistoryList.add(bizHistorySignInfo);

        MchntImageInfoMapper mchntImageInfoMapper = new MchntImageInfoMapperImpl();
        //修改映像信息 -> 新增待审核
        List<BizTmp> mchntImageInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_IMAGE_INFO);
        if (!CollectionUtils.isEmpty(mchntImageInfoBizTmpList)) {
            for (BizTmp mchntImageInfoBizTmp : mchntImageInfoBizTmpList) {
                String imageJson = InitParamUtil.getJsonString(mchntImageInfoBizTmp);
                MchntImageInfo auditPassMchntImageInfo = JSON.parseObject(imageJson, MchntImageInfo.class);
                auditPassMchntImageInfo.setAuditStatus(auditStatus);
                auditPassMchntImageInfo.setLastUpdateTime(updateTime);
                auditPassMchntImageInfo.setLastAuditId(request.getUserId());
                auditPassMchntImageInfo.setLastAuditTime(updateTime);
                totalImageInfoList.add(auditPassMchntImageInfo);

                MchntImageInfo dbImageInfo = mchntImageInfoMapper.selectMchntImageInfoById(instId, auditPassMchntImageInfo.getId());
                if (null == dbImageInfo) {
                    dbImageInfo = new MchntImageInfo();
                }

                mchntImageInfoBizTmp.setAuditStatus(auditStatus);
                mchntImageInfoBizTmp.setBizStatus(bizStatus);
                mchntImageInfoBizTmp.setLastOprId(request.getUserId());
                mchntImageInfoBizTmp.setLastAuditTime(updateTime);
                mchntImageInfoBizTmp.setLastUpdateTime(updateTime);
                InitParamUtil.initBizTempData(mchntImageInfoBizTmp, JSONObject.toJSONString(auditPassMchntImageInfo));
                mchntImageInfoBizTmp.setLastAuditId(request.getUserId());
                totalBizTmpList.add(mchntImageInfoBizTmp);

                BizHistory bizHistoryImageInfo = initBizHistoryByCreate(mchntImageInfoBizTmp, CompareFieldsUtil.compareFields(dbImageInfo, auditPassMchntImageInfo, null), updateTime);
                totalBizHistoryList.add(bizHistoryImageInfo);
            }
        }


        if (BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
            //连锁商户门店 非独立维护商户
            commitByNoIndependentMchnt(xmlTreeUtil, auditPassMchntBaseInfo, auditPassMchntSignInfo, totalImageInfoList, totalBizTmpList, totalBizHistoryList);
        } else {


            if (!BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
                List<BizTmp> mchntAcctInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_ACCT_INFO);
                MchntAcctInfoMapper mchntAcctInfoMapper = new MchntAcctInfoMapperImpl();
                if (!CollectionUtils.isEmpty(mchntAcctInfoBizTmpList)) {
                    for (BizTmp mchntAcctInfoBizTmp : mchntAcctInfoBizTmpList) {
                        String passAcctJson = InitParamUtil.getJsonString(mchntAcctInfoBizTmp);
                        MchntAcctInfo auditPassMchntAcctInfo = JSON.parseObject(passAcctJson, MchntAcctInfo.class);

                        MchntAcctInfo mchntAcctInfo = mchntAcctInfoMapper.selectMchntAcctInfoById(instId, auditPassMchntAcctInfo.getId());
                        if (null == mchntAcctInfo) {
                            //新增结算账户信息
                            mchntAcctInfo = new MchntAcctInfo();
                        }

                        if (AppParamConstant.NO.equals(auditPassMchntAcctInfo.getAcctSignFlag())
                                && InitParamUtil.isCoreBankType(mchntAcctInfo.getSettleAcctType())
                                && AuditStatusEnum.MODIFY_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
                            //改变了结算账户，旧结算账户为本行账户，需去核心解约
                            xmlTreeUtil.setXmlTreeStringValue("rebindAcctNo", mchntAcctInfo.getSettleAcctNo());
                        }

                        auditPassMchntAcctInfo.setAuditStatus(auditStatus);
                        auditPassMchntAcctInfo.setLastAuditId(request.getUserId());
                        auditPassMchntAcctInfo.setLastUpdateTime(updateTime);
                        auditPassMchntAcctInfo.setLastAuditTime(updateTime);
                        totalAcctInfoList.add(auditPassMchntAcctInfo);

                        mchntAcctInfoBizTmp.setAuditStatus(auditStatus);
                        mchntAcctInfoBizTmp.setBizStatus(bizStatus);
                        mchntAcctInfoBizTmp.setLastOprId(request.getUserId());
                        mchntAcctInfoBizTmp.setLastAuditTime(updateTime);
                        mchntAcctInfoBizTmp.setLastUpdateTime(updateTime);
                        InitParamUtil.initBizTempData(mchntAcctInfoBizTmp, JSONObject.toJSONString(auditPassMchntAcctInfo));
                        mchntAcctInfoBizTmp.setLastAuditId(request.getUserId());
                        totalBizTmpList.add(mchntAcctInfoBizTmp);

                        BizHistory bizHistoryAcctInfo = initBizHistoryByCreate(mchntAcctInfoBizTmp, CompareFieldsUtil.compareFields(mchntAcctInfo, auditPassMchntAcctInfo, null), updateTime);
                        totalBizHistoryList.add(bizHistoryAcctInfo);
                    }
                }
            }


            List<BizTmp> bizProdTmps = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_PROD_INFO);
            if (!CollectionUtils.isEmpty(bizProdTmps)) {
                bizProdTmps = bizProdTmps.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(bizProdTmps)) {
                    List<MchntProdInfo> bizProdList = bizProdTmps.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntProdInfo.class)).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(bizProdList)) {
                        MchntProdInfoMapper mchntProdInfoMapper = new MchntProdInfoMapperImpl();
                        for (MchntProdInfo mchntProdInfo : bizProdList) {
                            MchntProdInfo dbProdInfo = mchntProdInfoMapper.selectMchntProdInfoById(mchntBaseInfo.getInstId(), mchntProdInfo.getId());
                            if (null != dbProdInfo) {
                                //业务临时信息
                                Optional<BizTmp> match = bizProdTmps.stream().filter(item -> item.getRealId().equals(dbProdInfo.getId())).findFirst();
                                BizTmp bizProdTmp = match.get();
                                bizProdTmp.setAuditStatus(auditStatus);
                                bizProdTmp.setLastOprId(request.getUserId());
                                bizProdTmp.setLastAuditTime(updateTime);
                                bizProdTmp.setLastUpdateTime(updateTime);
                                bizProdTmp.setLastAuditId(request.getUserId());
                                totalBizTmpList.add(bizProdTmp);

                                MchntProdInfo passProd = JSON.parseObject(InitParamUtil.getJsonString(bizProdTmp), MchntProdInfo.class);
                                passProd.setAuditStatus(auditStatus);
                                passProd.setLastOprId(request.getUserId());
                                passProd.setLastUpdateTime(updateTime);
                                passProd.setLastAuditTime(updateTime);
                                InitParamUtil.initBizTempData(bizProdTmp, JSONObject.toJSONString(passProd));
                                totalMchntProdInfoList.add(passProd);

                                BizHistory bizHistoryProdInfo = initBizHistoryByCreate(bizProdTmp, CompareFieldsUtil.compareFields(dbProdInfo, passProd, null), updateTime);
                                totalBizHistoryList.add(bizHistoryProdInfo);
                            } else {
                                //业务临时信息 新增的产品
                                mchntProdInfo.setAuditStatus(auditStatus);
                                mchntProdInfo.setLastOprId(request.getUserId());
                                mchntProdInfo.setLastUpdateTime(updateTime);
                                mchntProdInfo.setLastAuditTime(updateTime);
                                totalMchntProdInfoList.add(mchntProdInfo);
                                Optional<BizTmp> match = bizProdTmps.stream().filter(item -> item.getRealId().equals(mchntProdInfo.getId())).findFirst();
                                BizTmp bizProdTmp = match.get();
                                bizProdTmp.setAuditStatus(auditStatus);
                                bizProdTmp.setLastOprId(request.getUserId());
                                bizProdTmp.setLastAuditTime(updateTime);
                                bizProdTmp.setLastUpdateTime(updateTime);
                                InitParamUtil.initBizTempData(bizProdTmp, JSONObject.toJSONString(mchntProdInfo));
                                bizProdTmp.setLastAuditId(request.getUserId());
                                totalBizTmpList.add(bizProdTmp);

                                BizHistory bizHistoryProdInfo = initBizHistoryByCreate(bizProdTmp, CompareFieldsUtil.compareFields(new MchntProdInfo(), mchntProdInfo, null), updateTime);
                                totalBizHistoryList.add(bizHistoryProdInfo);
                            }
                        }
                    }
                }
            }


            if (!BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
                List<BizTmp> feeBizList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_FEE_INFO);
                if (!CollectionUtils.isEmpty(feeBizList)) {
                    feeBizList = feeBizList.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(feeBizList)) {
                        MchntFeeInfoMapper mchntFeeInfoMapper = new MchntFeeInfoMapperImpl();
                        for (BizTmp mchntFeeBizTmp : feeBizList) {
                            String passJson = InitParamUtil.getJsonString(mchntFeeBizTmp);
                            MchntFeeInfo passFeeInfo = JSON.parseObject(passJson, MchntFeeInfo.class);

                            MchntFeeInfo dbMchntFeeInfo = mchntFeeInfoMapper.selectMchntFeeInfoById(passFeeInfo.getInstId(), passFeeInfo.getId());
                            if (null == dbMchntFeeInfo) {
                                //新增费率信息 后续对比 bizHistoryFeeInfo 不能为null
                                dbMchntFeeInfo = new MchntFeeInfo();
                                //多次修改同一条数据
                                //查找正式表数据
                                if ("E".equals(mchntFeeBizTmp.getBizOpr())) {
                                    MchntFeeInfo oldFeeInfo = mchntFeeInfoMapper.selectMchntFeeInfoById(passFeeInfo.getInstId(), mchntFeeBizTmp.getRemark1());
                                    if (null != oldFeeInfo) {
                                        //若 生效日期 > 审核日期
                                        if (DateUtil.compareDate(oldFeeInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate()) > 0) {
                                            //修改旧数据
                                            passFeeInfo.setId(oldFeeInfo.getId());
                                        }
                                    }
                                }
                            } else {
                                //修改旧数据
                                //若生效日期 大于 当前日期  则为同一条数据当天第二次以上的修改
                                if ("D".equals(mchntFeeBizTmp.getBizOpr())) {
                                    if (DateUtil.compareDate(dbMchntFeeInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate()) > 0) {
                                        rglog.error("当前修改的费率的生效日期<{}> 大于 当前日期<{}>，则为同一条数据当天第二次以上的修改,将新增的临时表的数据", dbMchntFeeInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate());
                                        //当日第二次修改  让新临时的数据覆盖该条数据
                                        mchntFeeBizTmp.setAuditStatus(auditStatus);
                                        mchntFeeBizTmp.setBizStatus(bizStatus);
                                        mchntFeeBizTmp.setLastOprId(request.getUserId());
                                        mchntFeeBizTmp.setLastAuditTime(updateTime);
                                        mchntFeeBizTmp.setLastUpdateTime(updateTime);
                                        InitParamUtil.initBizTempData(mchntFeeBizTmp, JSONObject.toJSONString(passFeeInfo));
                                        mchntFeeBizTmp.setLastAuditId(request.getUserId());
                                        totalBizTmpList.add(mchntFeeBizTmp);
                                        continue;
                                    }
                                }
                            }

                            if ("D".equals(mchntFeeBizTmp.getBizOpr())) {
                                passFeeInfo.setFeeExpiryDate(DateUtil.getCurrentDate());
                            } else if ("E".equals(mchntFeeBizTmp.getBizOpr())) {
                                passFeeInfo.setFeeEffectiveDate(DateUtil.getFutureDay(1));
                            }

                            passFeeInfo.setAuditStatus(auditStatus);
                            passFeeInfo.setLastAuditId(request.getUserId());
                            passFeeInfo.setLastUpdateTime(updateTime);
                            passFeeInfo.setLastAuditTime(updateTime);
                            totalFeeInfoList.add(passFeeInfo);

                            mchntFeeBizTmp.setAuditStatus(auditStatus);
                            mchntFeeBizTmp.setBizStatus(bizStatus);
                            mchntFeeBizTmp.setLastOprId(request.getUserId());
                            mchntFeeBizTmp.setLastAuditTime(updateTime);
                            mchntFeeBizTmp.setLastUpdateTime(updateTime);
                            InitParamUtil.initBizTempData(mchntFeeBizTmp, JSONObject.toJSONString(passFeeInfo));
                            mchntFeeBizTmp.setLastAuditId(request.getUserId());
                            totalBizTmpList.add(mchntFeeBizTmp);

                            BizHistory bizHistoryFeeInfo = initBizHistoryByCreate(mchntFeeBizTmp, CompareFieldsUtil.compareFields(dbMchntFeeInfo, passFeeInfo, null), updateTime);
                            totalBizHistoryList.add(bizHistoryFeeInfo);
                        }
                    }
                }
            }


            List<BizTmp> authTmps = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_AUTH_CTRL);
            if (!CollectionUtils.isEmpty(authTmps)) {
                authTmps = authTmps.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(authTmps)) {
                    List<MchntAuthCtrl> bizAuthList = authTmps.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntAuthCtrl.class)).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(bizAuthList)) {
                        MchntAuthCtrlMapper mchntAuthCtrlMapper = new MchntAuthCtrlMapperImpl();
                        for (MchntAuthCtrl mchntAuthCtrl : bizAuthList) {
                            MchntAuthCtrl dbAuthInfo = mchntAuthCtrlMapper.selectMchntAuthCtrlInfoById(instId, mchntAuthCtrl.getId());
                            if (null != dbAuthInfo) {
                                //只改待处理的状态
                                //商户费率信息表
                                //费率业务临时信息
                                Optional<BizTmp> match = authTmps.stream().filter(item -> item.getRealId().equals(dbAuthInfo.getId())).findFirst();
                                BizTmp bizAuth = match.get();
                                MchntAuthCtrl passAuth = JSON.parseObject(InitParamUtil.getJsonString(bizAuth), MchntAuthCtrl.class);
                                passAuth.setAuditStatus(auditStatus);
                                passAuth.setLastOprId(request.getUserId());
                                passAuth.setLastUpdateTime(updateTime);
                                passAuth.setLastAuditTime(updateTime);
                                totalAuthCtrlList.add(passAuth);

                                bizAuth.setAuditStatus(auditStatus);
                                bizAuth.setLastOprId(request.getUserId());
                                bizAuth.setLastAuditTime(updateTime);
                                bizAuth.setLastUpdateTime(updateTime);
                                InitParamUtil.initBizTempData(bizAuth, JSONObject.toJSONString(passAuth));
                                bizAuth.setLastAuditId(request.getUserId());
                                totalBizTmpList.add(bizAuth);


                                BizHistory bizHistoryInfo = initBizHistoryByCreate(bizAuth, CompareFieldsUtil.compareFields(dbAuthInfo, passAuth, null), updateTime);
                                totalBizHistoryList.add(bizHistoryInfo);
                            } else {
                                //业务临时信息 新增的权限
                                mchntAuthCtrl.setAuditStatus(auditStatus);
                                mchntAuthCtrl.setLastOprId(request.getUserId());
                                mchntAuthCtrl.setLastAuditTime(updateTime);
                                mchntAuthCtrl.setLastUpdateTime(updateTime);
                                totalAuthCtrlList.add(mchntAuthCtrl);

                                Optional<BizTmp> match = authTmps.stream().filter(item -> item.getRealId().equals(mchntAuthCtrl.getId())).findFirst();
                                BizTmp bizAuth = match.get();
                                bizAuth.setAuditStatus(auditStatus);
                                bizAuth.setLastOprId(request.getUserId());
                                bizAuth.setLastAuditTime(updateTime);
                                bizAuth.setLastUpdateTime(updateTime);
                                InitParamUtil.initBizTempData(bizAuth, JSONObject.toJSONString(mchntAuthCtrl));
                                bizAuth.setLastAuditId(request.getUserId());
                                totalBizTmpList.add(bizAuth);


                                BizHistory bizHistoryInfo = initBizHistoryByCreate(bizAuth, CompareFieldsUtil.compareFields(new MchntAuthCtrl(), mchntAuthCtrl, null), updateTime);
                                totalBizHistoryList.add(bizHistoryInfo);
                            }
                        }
                    }
                }
            }

            if (!BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
                List<BizTmp> stageBizList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_STAGE_INFO);
                if (!CollectionUtils.isEmpty(stageBizList)) {
                    //只看待审核的
                    stageBizList = stageBizList.stream().filter(item -> item.getAuditStatus().endsWith("1")).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(stageBizList)) {
                        MchntStageInfoMapper mchntStageInfoMapper = new MchntStageInfoMapperImpl();
                        for (BizTmp stageTmp : stageBizList) {
                            String passJson = InitParamUtil.getJsonString(stageTmp);
                            MchntStageInfo passStageInfo = JSON.parseObject(passJson, MchntStageInfo.class);
                            String stagePrimaryKey = passStageInfo.getMchntNo() + passStageInfo.getBaseProdCode()
                                    + passStageInfo.getProdStageCode()
                                    + passStageInfo.getMchntStageNum()
                                    + passStageInfo.getFeeEffectiveDate();
                            MchntStageInfo dbMchntStageInfo = mchntStageInfoMapper.selectMchntStageInfoById(passStageInfo.getInstId(), passStageInfo.getId());
                            if (null == dbMchntStageInfo) {
                                //新增费率信息 后续对比 bizHistoryFeeInfo 不能为null
                                dbMchntStageInfo = new MchntStageInfo();
                                //多次修改同一条数据
                                //查找正式表数据
                                if ("E".equals(stageTmp.getBizOpr())) {
                                    MchntStageInfo oldStageInfo = mchntStageInfoMapper.selectMchntStageInfoById(passStageInfo.getInstId(), stageTmp.getRemark1());
                                    if (null != oldStageInfo) {
                                        //若 生效日期 > 审核日期
                                        if (DateUtil.compareDate(oldStageInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate()) > 0) {
                                            //修改旧数据
                                            passStageInfo.setId(oldStageInfo.getId());
                                        }
                                    }
                                }


                                //多次修改同一条数据，只更新一条，不插入
                                MchntStageInfo oldStageInfo = mchntStageInfoMapper.selectMchntStageInfoByStagePrimaryKey(passStageInfo.getInstId(), passStageInfo.getStagePrimaryKey());
                                if (null != oldStageInfo) {
                                    if (DateUtil.compareDate(oldStageInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate()) > 0) {
                                        //修改旧数据
                                        passStageInfo.setId(oldStageInfo.getId());
                                        passStageInfo.setStagePrimaryKey(stagePrimaryKey);
                                    }
                                }


                            } else {
                                //修改旧数据
                                //若生效日期 大于 当前日期  则为同一条数据当天第二次以上的修改
                                if ("D".equals(stageTmp.getBizOpr())) {
                                    if (DateUtil.compareDate(dbMchntStageInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate()) > 0) {
                                        rglog.error("当前修改的费率的生效日期<{}> 大于 当前日期<{}>，则为同一条数据当天第二次以上的修改,将新增的临时表的数据", dbMchntStageInfo.getFeeEffectiveDate(), DateUtil.getCurrentDate());
                                        //当日第二次修改  让新临时的数据覆盖该条数据
                                        stageTmp.setAuditStatus(auditStatus);
                                        stageTmp.setBizStatus(bizStatus);
                                        stageTmp.setLastOprId(request.getUserId());
                                        stageTmp.setLastAuditTime(updateTime);
                                        stageTmp.setLastUpdateTime(updateTime);
                                        InitParamUtil.initBizTempData(stageTmp, JSONObject.toJSONString(passStageInfo));
                                        stageTmp.setLastAuditId(request.getUserId());
                                        totalBizTmpList.add(stageTmp);
                                        continue;
                                    }
                                }

                            }

                            if ("D".equals(stageTmp.getBizOpr())) {
                                passStageInfo.setFeeExpiryDate(DateUtil.getCurrentDate());
                            } else if ("E".equals(stageTmp.getBizOpr())) {
                                passStageInfo.setFeeEffectiveDate(DateUtil.getFutureDay(1));
                                stagePrimaryKey = passStageInfo.getMchntNo() + passStageInfo.getBaseProdCode()
                                        + passStageInfo.getProdStageCode()
                                        + passStageInfo.getMchntStageNum()
                                        + passStageInfo.getFeeEffectiveDate();
                                passStageInfo.setStagePrimaryKey(stagePrimaryKey);
                            }
                            passStageInfo.setAuditStatus(auditStatus);
                            passStageInfo.setLastAuditId(request.getUserId());
                            passStageInfo.setLastUpdateTime(updateTime);
                            passStageInfo.setLastAuditTime(updateTime);
                            totalStageInfoList.add(passStageInfo);

                            stageTmp.setAuditStatus(auditStatus);
                            stageTmp.setBizStatus(bizStatus);
                            stageTmp.setLastOprId(request.getUserId());
                            stageTmp.setLastAuditTime(updateTime);
                            stageTmp.setLastUpdateTime(updateTime);
                            InitParamUtil.initBizTempData(stageTmp, JSONObject.toJSONString(passStageInfo));
                            stageTmp.setLastAuditId(request.getUserId());
                            totalBizTmpList.add(stageTmp);

                            BizHistory bizHistoryStageInfo = initBizHistoryByCreate(stageTmp, CompareFieldsUtil.compareFields(dbMchntStageInfo, passStageInfo, null), updateTime);
                            totalBizHistoryList.add(bizHistoryStageInfo);
                        }
                    }
                }
            }


            WechatMchntInfoMapper wechatMchntInfoMapper = new WechatMchntInfoMapperImpl();
            WechatMchntInfo wechatMchntInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntNo);
            if (null != wechatMchntInfo) {
                BizTmp wechatMchntBizTmp = bizTmpMapper.selectBizTmpByRealId(wechatMchntInfo.getInstId(), wechatMchntInfo.getId());
                String passWechatMchntJson = InitParamUtil.getJsonString(wechatMchntBizTmp);
                WechatMchntInfo auditPassWechatMchntInfo = JSON.parseObject(passWechatMchntJson, WechatMchntInfo.class);
                auditPassWechatMchntInfo.setAuditStatus(auditStatus);
                auditPassWechatMchntInfo.setLastAuditId(request.getUserId());
                auditPassWechatMchntInfo.setLastUpdateTime(updateTime);
                auditPassWechatMchntInfo.setLastAuditTime(updateTime);

                wechatMchntBizTmp.setAuditStatus(auditStatus);
                wechatMchntBizTmp.setBizStatus(bizStatus);
                wechatMchntBizTmp.setLastOprId(request.getUserId());
                wechatMchntBizTmp.setLastAuditId(request.getUserId());
                wechatMchntBizTmp.setLastAuditTime(updateTime);
                wechatMchntBizTmp.setLastUpdateTime(updateTime);
                InitParamUtil.initBizTempData(wechatMchntBizTmp, JSONObject.toJSONString(auditPassWechatMchntInfo));
                totalBizTmpList.add(wechatMchntBizTmp);
                BizHistory bizHistoryWechatMchntInfo = initBizHistoryByCreate(wechatMchntBizTmp, CompareFieldsUtil.compareFields(wechatMchntInfo, auditPassWechatMchntInfo, null), updateTime);
                totalBizHistoryList.add(bizHistoryWechatMchntInfo);

                wechatMchntInfo = auditPassWechatMchntInfo;
            } else {
                List<BizTmp> wechatMchntBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntNo, TableNameConstant.T_B_WECHAT_MCHNT_INFO);
                if (!CollectionUtils.isEmpty(wechatMchntBizTmpList)) {
                    BizTmp wechatMchntBizTmp = wechatMchntBizTmpList.get(0);
                    String passWechatMchntJson = InitParamUtil.getJsonString(wechatMchntBizTmp);
                    WechatMchntInfo auditPassWechatMchntInfo = JSON.parseObject(passWechatMchntJson, WechatMchntInfo.class);
                    auditPassWechatMchntInfo.setAuditStatus(auditStatus);
                    auditPassWechatMchntInfo.setLastAuditId(request.getUserId());
                    auditPassWechatMchntInfo.setLastUpdateTime(updateTime);
                    auditPassWechatMchntInfo.setLastAuditTime(updateTime);

                    wechatMchntBizTmp.setAuditStatus(auditStatus);
                    wechatMchntBizTmp.setBizStatus(bizStatus);
                    wechatMchntBizTmp.setLastOprId(request.getUserId());
                    wechatMchntBizTmp.setLastAuditId(request.getUserId());
                    wechatMchntBizTmp.setLastAuditTime(updateTime);
                    wechatMchntBizTmp.setLastUpdateTime(updateTime);
                    InitParamUtil.initBizTempData(wechatMchntBizTmp, JSONObject.toJSONString(auditPassWechatMchntInfo));
                    totalBizTmpList.add(wechatMchntBizTmp);
                    //wechatMchntInfo 为null 比对历史表会抛异常 ，先初始化
                    wechatMchntInfo = new WechatMchntInfo();
                    BizHistory bizHistoryWechatMchntInfo = initBizHistoryByCreate(wechatMchntBizTmp, CompareFieldsUtil.compareFields(wechatMchntInfo, auditPassWechatMchntInfo, null), updateTime);
                    totalBizHistoryList.add(bizHistoryWechatMchntInfo);
                    wechatMchntInfo = auditPassWechatMchntInfo;
                }
            }

            AlipayMchntInfoMapper alipayMchntInfoMapper = new AlipayMchntInfoMapperImpl();
            AlipayMchntInfo alipayMchntInfo = alipayMchntInfoMapper.selectAlipayMchntInfoByPrimaryKey(instId, mchntNo);
            if (null != alipayMchntInfo) {
                BizTmp alipayMchntBizTmp = bizTmpMapper.selectBizTmpByRealId(alipayMchntInfo.getInstId(), alipayMchntInfo.getId());
                String passAlipayMchntJson = StringUtil.isEmptyOrNull(alipayMchntBizTmp.getBizData2()) ?
                        alipayMchntBizTmp.getBizData1() : alipayMchntBizTmp.getBizData1() + alipayMchntBizTmp.getBizData2();
                passAlipayMchntJson = StringUtil.isEmptyOrNull(alipayMchntBizTmp.getBizData3()) ? passAlipayMchntJson : passAlipayMchntJson + alipayMchntBizTmp.getBizData3();
                AlipayMchntInfo auditPassAlipayMchntInfo = JSON.parseObject(passAlipayMchntJson, AlipayMchntInfo.class);
                auditPassAlipayMchntInfo.setAuditStatus(auditStatus);
                auditPassAlipayMchntInfo.setLastAuditId(request.getUserId());
                auditPassAlipayMchntInfo.setLastUpdateTime(updateTime);
                auditPassAlipayMchntInfo.setLastAuditTime(updateTime);

                alipayMchntBizTmp.setAuditStatus(auditStatus);
                alipayMchntBizTmp.setBizStatus(bizStatus);
                alipayMchntBizTmp.setLastOprId(request.getUserId());
                alipayMchntBizTmp.setLastAuditId(request.getUserId());
                alipayMchntBizTmp.setLastAuditTime(updateTime);
                alipayMchntBizTmp.setLastUpdateTime(updateTime);
                InitParamUtil.initBizTempData(alipayMchntBizTmp, JSONObject.toJSONString(auditPassAlipayMchntInfo));
                totalBizTmpList.add(alipayMchntBizTmp);
                BizHistory bizHistoryAlipayMchntInfo = initBizHistoryByCreate(alipayMchntBizTmp, CompareFieldsUtil.compareFields(alipayMchntInfo, auditPassAlipayMchntInfo, null), updateTime);
                totalBizHistoryList.add(bizHistoryAlipayMchntInfo);
                alipayMchntInfo = auditPassAlipayMchntInfo;
            } else {
                List<BizTmp> alipayMchntBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntNo, TableNameConstant.T_B_ALPAY_MCHNT_INFO);
                if (!CollectionUtils.isEmpty(alipayMchntBizTmpList)) {
                    BizTmp alipayMchntBizTmp = alipayMchntBizTmpList.get(0);
                    AlipayMchntInfo auditPassAlipayMchntInfo = JSON.parseObject(InitParamUtil.getJsonString(alipayMchntBizTmp), AlipayMchntInfo.class);
                    auditPassAlipayMchntInfo.setAuditStatus(auditStatus);
                    auditPassAlipayMchntInfo.setLastAuditId(request.getUserId());
                    auditPassAlipayMchntInfo.setLastUpdateTime(updateTime);
                    auditPassAlipayMchntInfo.setLastAuditTime(updateTime);

                    alipayMchntBizTmp.setAuditStatus(auditStatus);
                    alipayMchntBizTmp.setBizStatus(bizStatus);
                    alipayMchntBizTmp.setLastOprId(request.getUserId());
                    alipayMchntBizTmp.setLastAuditId(request.getUserId());
                    alipayMchntBizTmp.setLastAuditTime(updateTime);
                    alipayMchntBizTmp.setLastUpdateTime(updateTime);
                    InitParamUtil.initBizTempData(alipayMchntBizTmp, JSONObject.toJSONString(auditPassAlipayMchntInfo));
                    totalBizTmpList.add(alipayMchntBizTmp);
                    //alipayMchntInfo 为null 比对历史表会抛异常 ，先初始化
                    alipayMchntInfo = new AlipayMchntInfo();
                    BizHistory bizHistoryAlipayMchntInfo = initBizHistoryByCreate(alipayMchntBizTmp, CompareFieldsUtil.compareFields(alipayMchntInfo, auditPassAlipayMchntInfo, null), updateTime);
                    totalBizHistoryList.add(bizHistoryAlipayMchntInfo);
                    alipayMchntInfo = auditPassAlipayMchntInfo;
                }
            }

            CupsMchntInfoMapper cupsMchntInfoMapper = new CupsMchntInfoMapperImpl();
            CupsMchntInfo cupsMchntInfo = cupsMchntInfoMapper.selectCupsMchntInfoByPrimaryKey(instId, mchntNo);
            if (null != cupsMchntInfo) {
                BizTmp cupsMchntBizTmp = bizTmpMapper.selectBizTmpByRealId(cupsMchntInfo.getInstId(), cupsMchntInfo.getId());
                String passCupsMchntJson = StringUtil.isEmptyOrNull(cupsMchntBizTmp.getBizData2()) ?
                        cupsMchntBizTmp.getBizData1() : cupsMchntBizTmp.getBizData1() + cupsMchntBizTmp.getBizData2();
                passCupsMchntJson = StringUtil.isEmptyOrNull(cupsMchntBizTmp.getBizData3()) ? passCupsMchntJson : passCupsMchntJson + cupsMchntBizTmp.getBizData3();
                CupsMchntInfo auditPassCupsMchntInfo = JSON.parseObject(passCupsMchntJson, CupsMchntInfo.class);
                auditPassCupsMchntInfo.setAuditStatus(auditStatus);
                auditPassCupsMchntInfo.setLastAuditId(request.getUserId());
                auditPassCupsMchntInfo.setLastUpdateTime(updateTime);
                auditPassCupsMchntInfo.setLastAuditTime(updateTime);

                cupsMchntBizTmp.setAuditStatus(auditStatus);
                cupsMchntBizTmp.setBizStatus(bizStatus);
                cupsMchntBizTmp.setLastOprId(request.getUserId());
                cupsMchntBizTmp.setLastAuditId(request.getUserId());
                cupsMchntBizTmp.setLastAuditTime(updateTime);
                cupsMchntBizTmp.setLastUpdateTime(updateTime);
                InitParamUtil.initBizTempData(cupsMchntBizTmp, JSONObject.toJSONString(auditPassCupsMchntInfo));
                totalBizTmpList.add(cupsMchntBizTmp);
                BizHistory bizHistoryCupsMchntInfo = initBizHistoryByCreate(cupsMchntBizTmp, CompareFieldsUtil.compareFields(cupsMchntInfo, auditPassCupsMchntInfo, null), updateTime);
                totalBizHistoryList.add(bizHistoryCupsMchntInfo);
                cupsMchntInfo = auditPassCupsMchntInfo;
            }

            /*  新增审核通过，进行虚拟账户开户 */
            if (AuditStatusEnum.ADD_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
                VirtAcctIntegration virtAcctIntegration = new VirtAcctIntegration();
                boolean result = virtAcctIntegration.virtAcctEstablish(auditPassMchntBaseInfo, txnInfo);
                if (!result) {
                    //生成虚拟账户失败
                    throw new BizException(RespCodeEnum.CREATE_VIRT_ACCT_INFO_ERROR.getRespCode(), RespCodeEnum.CREATE_VIRT_ACCT_INFO_ERROR.getRespDesc());
                }
            }

            /* 将数据统一修改为 审核通过 */
            MchntManageOperationService mchntManageOperationService = new MchntManageOperationServiceImpl();
            mchntManageOperationService.modifyOrAuditMchntInfoDb(request, auditPassMchntBaseInfo, totalBizTmpList, totalBizHistoryList, totalMchntProdInfoList,
                    totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, wechatMchntInfo, alipayMchntInfo, cupsMchntInfo,
                    auditPassMchntSignInfo, totalAcctInfoList, totalImageInfoList);


            // 审核通过消息推送
            String pushOpenId = xmlTreeUtil.getXmlTreeStringValue("managerOpenId");
            if (!StringUtil.isEmptyOrNull(pushOpenId) && !"OPENID".equals(pushOpenId)) {
                MchntCheckPassMsgPushRequest wxPushRequest = new MchntCheckPassMsgPushRequest();
                cc.rengu.igas.channel.wechat.facade.base.Header wxPushHeader = new cc.rengu.igas.channel.wechat.facade.base.Header();
                wxPushHeader.setInstId(instId);
                wxPushHeader.setSrcSysId(AppParamConstant.SYS_ID);
                wxPushHeader.setChanlId(ChannelEnum.BOMP.getChannelType());
                wxPushHeader.setBizType("00");
                wxPushHeader.setVersion("1.0.0");
                wxPushHeader.setTxnNum("checkpass");
                wxPushHeader.setTraceNo(xmlTreeUtil.getXmlTreeStringValue(xmlTreeUtil.getXmlTreeStringValue(TreeNodeConstant.SYS_SEQ_NUM)));
                wxPushHeader.setTransDate(DateUtil.getCurrentDate());
                wxPushHeader.setTransTime(DateUtil.getCurrentTime());
                wxPushRequest.setHeader(wxPushHeader);
                wxPushRequest.setChannelId(ChannelEnum.WXZF.getChannelType());
                wxPushRequest.setContactPhoneNo(mchntBaseInfo.getMchntContactMobile());
                wxPushRequest.setMchntContact(mchntBaseInfo.getMchntContactName());
                wxPushRequest.setMchntName(mchntBaseInfo.getMchntName());
                wxPushRequest.setMchntNo(mchntBaseInfo.getMchntNo());
                wxPushRequest.setOpenId(pushOpenId);
                DubboService dubboService = new DubboServiceImpl();
                int dubboReturnCode = dubboService.asynCallDubboService("wechatMsgPushService", "mchntCheckPassMsgPush", wxPushRequest, null);
                if (0 != dubboReturnCode) {
                    rglog.error("商户审核通过消息推送失败！");
                }
            }


            //异步进行第三方商户入驻或商户信息修改
            if (AuditStatusEnum.ADD_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)
                    || AuditStatusEnum.MODIFY_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
                String sysSeqNum = xmlTreeUtil.getXmlTreeStringValue(TreeNodeConstant.SYS_SEQ_NUM);


                //微信商户进件，绑定支付目录，绑定APPid
                WechatIntegration wechatIntegration = new WechatIntegration();
                boolean addJsapiPath = true;
                boolean bindAppid = true;
                boolean wechatResult = true;
                if (null != wechatMchntInfo) {
                    rglog.info("-----------------商户微信进件---------------------");
                    //获取商户银行卡结算信息
                    List<BizTmp> mchntAcctInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_ACCT_INFO);
                    MchntAcctInfo mchntAcctInfo = new MchntAcctInfo();
                    if (!CollectionUtils.isEmpty(mchntAcctInfoBizTmpList)) {
                        for (BizTmp mchntAcctInfoBizTmp : mchntAcctInfoBizTmpList) {
                            String passAcctJson = InitParamUtil.getJsonString(mchntAcctInfoBizTmp);
                            MchntAcctInfo auditPassMchntAcctInfo = JSON.parseObject(passAcctJson, MchntAcctInfo.class);
                            if ("00".equals(auditPassMchntAcctInfo.getFundType())) {
                                BeanUtil.beanCopy(auditPassMchntAcctInfo, mchntAcctInfo);
                            }
                        }
                    }

                    //商户签约信息
                    String signJson = InitParamUtil.getJsonString(signBizTmp);
                    MchntSignInfo mchntSignInfo = JSON.parseObject(signJson, MchntSignInfo.class);
                    wechatResult = wechatIntegration.createMerchant(wechatMchntInfo, sysSeqNum, auditPassMchntBaseInfo, txnInfo, mchntAcctInfo, mchntSignInfo);
                    if (AuditStatusEnum.ADD_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus) && wechatResult) {
                        //只有新增时，绑定支付目录与APPID
                        //设置支付目录与绑定APPid
                        addJsapiPath = wechatIntegration.addJsapiPath(wechatMchntInfo, sysSeqNum, txnInfo);

                        //绑定APPID
                        bindAppid = wechatIntegration.bindAppid(wechatMchntInfo, sysSeqNum, txnInfo);
                    }
                }


                boolean aliResult = true;
                if (null != alipayMchntInfo) {
                    AlipayIntegration alipayIntegration = new AlipayIntegration();
                    aliResult = alipayIntegration.createMerchant(alipayMchntInfo, sysSeqNum, auditPassMchntBaseInfo, auditPassMchntSignInfo, txnInfo);
                }

                //商户申请人推送
                EsbIntegration esbIntegration = new EsbIntegration();
                boolean smsResult = esbIntegration.sendSmsMsg(auditPassMchntBaseInfo, txnInfo);


                if (!wechatResult || !aliResult) {
                    String mchntErrorDesc = "商户审批成功!";
                    String wechatMchntErrorDesc = xmlTreeUtil.getXmlTreeStringValue(BompTreeNodeConstant.WECHAT_MCHNT_ERROR_DESC);
                    if (!StringUtil.isEmptyOrNull(wechatMchntErrorDesc)) {
                        mchntErrorDesc = mchntErrorDesc + "<p/>微信进件结果:<a style='color:red'>" + wechatMchntErrorDesc + "</a>";
                    }
                    String alipayMchntErrorDesc = xmlTreeUtil.getXmlTreeStringValue(BompTreeNodeConstant.ALIPAY_MCHNT_ERROR_DESC);
                    if (!StringUtil.isEmptyOrNull(alipayMchntErrorDesc)) {
                        mchntErrorDesc = mchntErrorDesc + "<p/>支付宝进件结果:<a style='color:red'>" + alipayMchntErrorDesc + "</a>";
                    }
                    if (!StringUtil.isEmptyOrNull(wechatMchntErrorDesc) || !StringUtil.isEmptyOrNull(alipayMchntErrorDesc)) {
                        mchntErrorDesc = mchntErrorDesc + "<p/>" + BompAppParamConstant.END_CREATE_MCHNT_ERROR_MSG;
                    }
                    rglog.error("长度:" + mchntErrorDesc.length());
                    if (mchntErrorDesc.length() > 52) {
                        mchntErrorDesc = "进件结果:" + wechatMchntErrorDesc + alipayMchntErrorDesc;
                    }
                    rglog.error("长度:" + mchntErrorDesc.length());
                    rglog.error("{}", mchntErrorDesc);
//                    throw new BizException("e", mchntErrorDesc);
                    throw new BizException(RespCodeEnum.CREATE_INST_MACHNT_INFO_ERROR.getRespCode(), RespCodeEnum.CREATE_INST_MACHNT_INFO_ERROR.getRespDesc());

                }

                try {
                    wechatIntegration.beforeRealNameCheck(auditPassMchntBaseInfo);
                    WechatMchntInfo realNameWechatMchntInfo = wechatIntegration.realNameApplyment(mchntBaseInfo);
                } catch (Exception e) {
                    rglog.error("实名认证失败:" + cc.rengu.utility.base.StringUtil.ExceptionToString(e));
                }

                if (!addJsapiPath || !bindAppid) {
                    throw new BizException(RespCodeEnum.WECHAT_SET_PATH_OR_APPID_ERROR.getRespCode(), RespCodeEnum.WECHAT_SET_PATH_OR_APPID_ERROR.getRespDesc());
                }

            } else if (AuditStatusEnum.CANCEL_AUDIT_SUCCESS.getAuditStatus().equals(auditStatus)) {
                //注销审核通过，调用核心签约解约
                EsbIntegration esbIntegration = new EsbIntegration();
                boolean acctSign = esbIntegration.coreAcctSign(auditPassMchntBaseInfo, auditPassMchntSignInfo, txnInfo);

            }


        }

    }


    private void commitByNoIndependentMchnt(XmlTreeUtil xmlTreeUtil,
                                            MchntBaseInfo mchntBaseInfo,
                                            MchntSignInfo mchntSignInfo,
                                            List<MchntImageInfo> mchntImageInfoList,
                                            List<BizTmp> bizTmpList,
                                            List<BizHistory> bizHistoryList) throws Exception {
        /* 开启数据库事务 */
        String dbPoolName = XmlConfigUtil.getXmlConfigCacheKeyValue(AppConfigConstant.DATABASE_CONF_NODE, AppConfigConstant.MCMP_POOL_NAME);
        String corporation = xmlTreeUtil.getXmlTreeStringValue(AppParamConstant.CORPORATION);
        if (null != corporation && !corporation.isEmpty()) {
            String dbPoolCashNode = corporation.trim() + AppParamConstant.DATABASE_CONF_NODE;
            dbPoolName = XmlConfigUtil.getXmlConfigCacheKeyValue(dbPoolCashNode, AppConfigConstant.MCMP_POOL_NAME);
        }
        DbsUtil dbsUtil = new DbsUtil(dbPoolName);
        dbsUtil.dbsBeginTransaction();

        try {

            MchntBaseInfoMapper mchntBaseInfoMapper = new MchntBaseInfoMapperImpl();
            int dbResult = mchntBaseInfoMapper.updateMchntBaseInfoById(mchntBaseInfo);
            if (dbResult != 0) {
                dbsUtil.dbsEndTransaction(false);
                rglog.error("商户产品管理：更新商户基本信息表失败！id:{},mchnt:{},instId:{}",
                        mchntBaseInfo.getId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getInstId());
                throw new BizException(RespCodeEnum.DATABASE_OPR_ERROR.getRespCode(), RespCodeEnum.DATABASE_OPR_ERROR.getRespDesc());
            }

            MchntSignInfoMapper mchntSignInfoMapper = new MchntSignInfoMapperImpl();
            dbResult = mchntSignInfoMapper.updateMchntSignInfoById(mchntSignInfo);
            if (dbResult != 0) {
                dbsUtil.dbsEndTransaction(false);
                rglog.error("商户产品管理：更新商户签约信息表失败！id:{},mchnt:{},instId:{}",
                        mchntBaseInfo.getId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getInstId());
                throw new BizException(RespCodeEnum.DATABASE_OPR_ERROR.getRespCode(), RespCodeEnum.DATABASE_OPR_ERROR.getRespDesc());
            }

            MchntImageInfoMapper mchntImageInfoMapper = new MchntImageInfoMapperImpl();
            for (MchntImageInfo mchntImageInfo : mchntImageInfoList) {
                dbResult = mchntImageInfoMapper.updateMchntImageInfoById(mchntImageInfo);
                if (dbResult != 0) {
                    dbResult = mchntImageInfoMapper.insertMchntImageInfo(mchntImageInfo);
                    if (dbResult != 0) {
                        dbsUtil.dbsEndTransaction(false);
                        rglog.error("商户产品管理：更新商户映像信息表失败！id:{},mchnt:{},instId:{}",
                                mchntBaseInfo.getId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getInstId());
                        throw new BizException(RespCodeEnum.DATABASE_OPR_ERROR.getRespCode(), RespCodeEnum.DATABASE_OPR_ERROR.getRespDesc());
                    }
                }
            }


            if (!CollectionUtils.isEmpty(bizTmpList)) {
                BizTmpMapper bizTmpMapper = new BizTmpMapperImpl();
                for (BizTmp bizTmp : bizTmpList) {
                    dbResult = bizTmpMapper.insertBizTmp(bizTmp);
                    if (dbResult != 0) {
                        dbResult = bizTmpMapper.updateBizTmpByRealId(bizTmp);
                        if (dbResult != 0) {
                            dbsUtil.dbsEndTransaction(false);
                            rglog.error("商户产品信息-更新业务临时表记录失败！realId:{},manageInstId:{},instId:{}",
                                    bizTmp.getRealId(), bizTmp.getManageInstId(), bizTmp.getInstId());
                            throw new BizException(RespCodeEnum.DATABASE_OPR_ERROR.getRespCode(), RespCodeEnum.DATABASE_OPR_ERROR.getRespDesc());
                        }
                    }
                }
            }

            if (!CollectionUtils.isEmpty(bizHistoryList)) {
                BizHistoryMapper bizHistoryMapper = new BizHistoryMapperImpl();
                for (BizHistory bizHistory : bizHistoryList) {
                    dbResult = bizHistoryMapper.insertBompBizHistory(bizHistory);
                    if (dbResult != 0) {
                        dbsUtil.dbsEndTransaction(false);
                        rglog.error("新增业务历史表记录失败！realId:{},manageInstId:{},instId:{}",
                                bizHistory.getRealId(), bizHistory.getManageInstId(), bizHistory.getInstId());
                        throw new BizException(RespCodeEnum.DATABASE_OPR_ERROR.getRespCode(), RespCodeEnum.DATABASE_OPR_ERROR.getRespDesc());
                    }
                }
            }

            dbsUtil.dbsEndTransaction(true);
        } catch (Exception e) {
            dbsUtil.dbsEndTransaction(false);
            rglog.error("商户产品管理审核拒绝，失败！mchntNo:{}", mchntBaseInfo.getMchntNo());
            throw new BizException(RespCodeEnum.DATABASE_OPR_ERROR.getRespCode(), RespCodeEnum.DATABASE_OPR_ERROR.getRespDesc());
        }

    }


    /**
     * 修改商户产品信息
     * 修改提交审批商户基本信息  修改待提交审批 -》 修改待审核
     *
     * @param request 请求
     * @throws Exception 异常
     */
    private void modifyCommitMchntProdInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo) throws Exception {
        if (!ChangeNextStatusUtil.isAllowModifyData(mchntBaseInfo.getAuditStatus())) {
            rglog.error("管理商户产品信息失败,该商户信息不允许修改！，instId:{},mchntNo:{},audisStatus:{}",
                    mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getAuditStatus());
            throw new BizException(RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespCode(), RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespDesc());
        }


        //判断是新增审核拒绝后的修改待审批
        if (AuditStatusEnum.BE_AUDIT.getAuditStatus().equals(mchntBaseInfo.getAuditStatus()) || AuditStatusEnum.ADD_AUDIT_REJECT.getAuditStatus().equals(mchntBaseInfo.getAuditStatus())) {
            cerateCommitMchntProdInfo(request, mchntBaseInfo);
        } else {
            //状态为：修改待提交审批 （修改草稿）
            modifyCommitMchntProdInfoByModify(request, mchntBaseInfo);
        }
    }


    private void initAlipayMchntByModify(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String instId, String createTime, List<MchntProdInfo> totalMchntProdInfoList, List<BizTmp> totalBizTmpList, String auditStatus, BizTmpMapper bizTmpMapper, MchntSignInfo mchntSignInfo) throws Exception {
        List<BizTmp> alipayMchntList = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_ALPAY_MCHNT_INFO);
        if (CollectionUtils.isEmpty(alipayMchntList)) {
            //场景：原来无支付宝商户信息，现在新增支付宝商户信息
            //初始化支付宝商户信息表
            getAlipayMchntInfo(request, mchntBaseInfo, instId, createTime, auditStatus,
                    totalBizTmpList, mchntSignInfo, totalMchntProdInfoList);
        } else {
            //场景：有支付宝临时表信息，无正式表信息，现在修改临时表信息
            AlipayMchntInfo bizAliMchnt = JSON.parseObject(InitParamUtil.getJsonString(alipayMchntList.get(0)), AlipayMchntInfo.class);

            if (!StringUtil.isEmptyOrNull(request.getAlipayChannelId())) {
                //通道费率类型
                bizAliMchnt.setDstChannelType(request.getAlipayChannelId());
            }

            if (StringUtil.isEmptyOrNull(bizAliMchnt.getDstChannelType())) {
                List<MchntProdInfo> alipayProd = totalMchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getAlipayChannelId())).collect(Collectors.toList());
                bizAliMchnt.setDstChannelType(alipayProd.get(0).getAlipayChannelId());
            }

            BizTmp bizTmpAlipayMchnt = initBizTmpByCreate(mchntBaseInfo, bizAliMchnt.getId(),
                    JSONObject.toJSONString(bizAliMchnt), TableNameConstant.T_B_ALPAY_MCHNT_INFO,
                    auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
            totalBizTmpList.add(bizTmpAlipayMchnt);
        }
    }

    private void verifySpecialFee(List<BizTmp> totalBizTmpList, MchntBaseInfo mchntBaseInfo) throws Exception {
        //判断特殊费率，使用临时表中数据进行判断
        List<BizTmp> bizFeeList = totalBizTmpList.stream().filter(item -> TableNameConstant.T_B_MCHNT_FEE_INFO.equals(item.getOprTableEname())).collect(Collectors.toList());
        if (CollectionUtils.isEmpty(bizFeeList)) {
            return;
        }
        BizTmpMapper bizTmpMapper = new BizTmpMapperImpl();
        BizTmp bizTmpMchntBase = bizTmpMapper.selectBizTmpByRealId(mchntBaseInfo.getInstId(), mchntBaseInfo.getId());
        if (null != bizTmpMchntBase) {
            String mchntJson = InitParamUtil.getJsonString(bizTmpMchntBase);
            MchntBaseInfo modifyMchntInfo = JSON.parseObject(mchntJson, MchntBaseInfo.class);

            if (AppParamConstant.YES.equals(modifyMchntInfo.getCashWithdrawalFlag()) || AppParamConstant.YES.equals(modifyMchntInfo.getRealSettleFlag())) {
                //特殊费率
                List<MchntFeeInfo> feeInfoList = bizFeeList.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntFeeInfo.class)).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(feeInfoList)) {
                    for (MchntFeeInfo mchntFeeInfo : feeInfoList) {
                        if ("0".equals(mchntFeeInfo.getFeeInputMode())
                                && !StringUtil.isEmptyOrNull(mchntFeeInfo.getFeeCode())) {
                            //特殊费率，且在当前日期生效
                            if (DateUtil.compareDate(DateUtil.getCurrentDate(), mchntFeeInfo.getFeeEffectiveDate()) >= 0
                                    && DateUtil.compareDate(DateUtil.getCurrentDate(), mchntFeeInfo.getFeeExpiryDate()) <= 0) {
                                rglog.error("商户开通了提现或本行卡实时清算不允许使用特殊费率，instId:{},mchntNo:{}。",
                                        modifyMchntInfo.getInstId(), modifyMchntInfo.getMchntNo());
                                throw new BizException(RespCodeEnum.NOT_TO_ALLOW_SET_FEE.getRespCode(), RespCodeEnum.NOT_TO_ALLOW_SET_FEE.getRespDesc());
                            }
                        }
                    }
                    //校验没有特殊费率，无需继续执行
                    return;
                }
            }

            List<BizTmp> acctBiz = bizTmpMapper.selectBizTmpByMchntNo(modifyMchntInfo.getInstId(), modifyMchntInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_ACCT_INFO);
            if (!CollectionUtils.isEmpty(acctBiz)) {
                List<MchntAcctInfo> mchntAcctInfoList = acctBiz.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntAcctInfo.class)).collect(Collectors.toList());
                mchntAcctInfoList = mchntAcctInfoList.stream().filter(item -> SettleTypeEnum.D0_TYPE.getSettleCode().equals(item.getSettleType())
                        || SettleTypeEnum.D1_TYPE.getSettleCode().equals(item.getSettleType())).collect(Collectors.toList());
                //结算账户有存在D0,D1结算数据
                if (!CollectionUtils.isEmpty(mchntAcctInfoList)) {
                    List<MchntFeeInfo> feeInfoList = bizFeeList.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntFeeInfo.class)).collect(Collectors.toList());
                    for (MchntFeeInfo mchntFeeInfo : feeInfoList) {
                        if ("0".equals(mchntFeeInfo.getFeeInputMode())
                                && !StringUtil.isEmptyOrNull(mchntFeeInfo.getFeeCode())) {
                            //特殊费率，且在当前日期生效
                            if (DateUtil.compareDate(DateUtil.getCurrentDate(), mchntFeeInfo.getFeeEffectiveDate()) >= 0
                                    && DateUtil.compareDate(DateUtil.getCurrentDate(), mchntFeeInfo.getFeeExpiryDate()) <= 0) {
                                rglog.error("商户开通了提现或本行卡实时清算不允许使用特殊费率，instId:{},mchntNo:{}。",
                                        modifyMchntInfo.getInstId(), modifyMchntInfo.getMchntNo());
                                throw new BizException(RespCodeEnum.NOT_TO_ALLOW_SET_FEE.getRespCode(), RespCodeEnum.NOT_TO_ALLOW_SET_FEE.getRespDesc());
                            }
                        }
                    }
                }
            }
        }


    }


    /**
     * 新增商户产品信息
     *
     * @param request 请求
     * @throws Exception 异常
     */
    private void cerateCommitMchntProdInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo) throws Exception {

        if (!ChangeNextStatusUtil.isAllowModifyData(mchntBaseInfo.getAuditStatus())) {
            rglog.error("管理商户产品信息失败,该商户信息不允许修改！，instId:{},mchntNo:{},audisStatus:{}",
                    mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getAuditStatus());
            throw new BizException(RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespCode(), RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespDesc());
        }

        XmlTreeUtil xmlTreeUtil = new XmlTreeUtil();
        String instId = xmlTreeUtil.getXmlTreeStringValue(TreeNodeConstant.INST_ID);
        List<BaseProdBean> baseProdBeanList = request.getBaseProdBeanList();
        String createTime = DateUtil.getCurrentDateTime(InitParamUtil.yyyy_MM_dd_HHmmssSSS);
        //新增待审核
        String auditStatus = AuditStatusEnum.ADD_BE_AUDIT.getAuditStatus();

        List<MchntProdInfo> totalMchntProdInfoList = new ArrayList<>();
        List<MchntFeeInfo> totalFeeInfoList = new ArrayList<>();
        List<MchntStageInfo> totalStageInfoList = new ArrayList<>();
        List<MchntAuthCtrl> totalAuthCtrlList = new ArrayList<>();
        List<BizTmp> totalBizTmpList = new ArrayList<>();
        BizTmpMapper bizTmpMapper = new BizTmpMapperImpl();

        String appId = null;
        String appKey = null;
        String miniAppId = null;
        String miniAppKey = null;
        String cupsChannelMchntNo = null;
        String mchntSignType = null;
        String independentEntryFlag = null;
        boolean wechatFlag = false;
        boolean aliFlag = false;
        if (!CollectionUtils.isEmpty(baseProdBeanList)) {

            for (BaseProdBean facadeBaseProd : baseProdBeanList) {
                if (BaseProdEnum.BASIC.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    //基础产品 - 00 基础公共不需要存入库，H5会上送但不需要处理
                    continue;
                }

                if (BaseProdEnum.BANK_CARD_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    if (!StringUtil.isEmptyOrNull(facadeBaseProd.getCupsChannelMchntNo())) {
                        cupsChannelMchntNo = facadeBaseProd.getCupsChannelMchntNo();
                    }
                    mchntSignType = facadeBaseProd.getMchntSignType();
                } else if (BaseProdEnum.WECHAT_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    appId = facadeBaseProd.getWechatAppid();
                    appKey = facadeBaseProd.getWechatAppidKey();
                    miniAppId = facadeBaseProd.getWechatMiniAppid();
                    miniAppKey = facadeBaseProd.getWechatMiniAppidKey();
                    independentEntryFlag = facadeBaseProd.getWechatSelfEntryFlag();
                    wechatFlag = true;
                } else if (BaseProdEnum.CUPS_CLOUD_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    if (!StringUtil.isEmptyOrNull(facadeBaseProd.getCupsChannelMchntNo())) {
                        cupsChannelMchntNo = facadeBaseProd.getCupsChannelMchntNo();
                    }
                } else if (BaseProdEnum.ALIPAY_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    aliFlag = true;
                }

                MchntProdInfoMapper mchntProdInfoMapper = new MchntProdInfoMapperImpl();
                //商户产品
                MchntProdInfo mchntProdInfo = mchntProdInfoMapper.selectMchntProdInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo(), facadeBaseProd.getBaseProdCode());
                if (null == mchntProdInfo) {
                    //无草稿数据(1、用户没有点击获取到产品详细信息，前台无法获取，由后台查询产品信息表进行赋值；2、H5统一一次上送数据)，
                    //初始化商户产品，商户费率，商户分期，商户权限等数据  状态为新增待审核
                    initMchntProdInfoByCreateCommit(request, mchntBaseInfo, createTime, auditStatus,
                            totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList,
                            totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                } else {
                    MchntManageOperationService mchntManageOperationService = new MchntManageOperationServiceImpl();
                    if (ADD_OPR.equals(facadeBaseProd.getOprType())) {
                        mchntManageOperationService.addBaseProdInfoSingleSaveByAuditIsBeOrReject(request, mchntBaseInfo, auditStatus, createTime, totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                    } else if (MODIFY_OPR.equals(facadeBaseProd.getOprType())) {
                        mchntManageOperationService.modifyBaseProdInfoSingleSaveByAuditBeOrReject(request, mchntBaseInfo, auditStatus, createTime, totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                    } else if (DELETE_OPR.equals(facadeBaseProd.getOprType())) {
                        mchntManageOperationService.deleteBaseProdInfoSingleSaveByAuditBeOrReject(request, mchntBaseInfo, auditStatus, createTime, totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                    } else {
                        //不送
                        mchntManageOperationService.modifyBaseProdInfoByModifySingleSave(request, mchntBaseInfo, auditStatus, createTime, totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                    }
                }
            }
        }

        //修改商户基本信息 -> 新增待审核
        if (!StringUtil.isEmptyOrNull(mchntSignType)) {
            //商户签约类型
            mchntBaseInfo.setMchntSignType(mchntSignType);
        }
        mchntBaseInfo.setAuditStatus(auditStatus);
        BizTmp bizTmpMchntBase = bizTmpMapper.selectBizTmpByRealId(instId, mchntBaseInfo.getId());
        bizTmpMchntBase.setAuditStatus(auditStatus);
        //新增
        bizTmpMchntBase.setBizOpr("I");
        InitParamUtil.initBizTempData(bizTmpMchntBase, JSONObject.toJSONString(mchntBaseInfo));
        totalBizTmpList.add(bizTmpMchntBase);


        //修改签约信息 -> 新增待审核
        MchntSignInfoMapper mchntSignInfoMapper = new MchntSignInfoMapperImpl();
        MchntSignInfo mchntSignInfo = mchntSignInfoMapper.selectMchntSignInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        mchntSignInfo.setAuditStatus(auditStatus);
        BizTmp bizTmpMchntSign = bizTmpMapper.selectBizTmpByRealId(instId, mchntSignInfo.getId());
        bizTmpMchntSign.setAuditStatus(auditStatus);
        InitParamUtil.initBizTempData(bizTmpMchntSign, JSONObject.toJSONString(mchntSignInfo));
        totalBizTmpList.add(bizTmpMchntSign);


        //修改结算信息 -> 新增待审核
        MchntAcctInfoMapper mchntAcctInfoMapper = new MchntAcctInfoMapperImpl();
        List<MchntAcctInfo> commitAcctInfoList = new ArrayList<>();
        List<MchntAcctInfo> mchntAcctInfoList = mchntAcctInfoMapper.selectMchntAcctInfoByMchntNo(instId, mchntBaseInfo.getMchntNo());
        //非独立维护，结算账户信息为空
        if (!BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
            for (MchntAcctInfo mchntAcctInfo : mchntAcctInfoList) {
                //商户结算信息表
                mchntAcctInfo.setAuditStatus(auditStatus);
                commitAcctInfoList.add(mchntAcctInfo);
                //费率业务临时信息
                BizTmp bizTmpMchntAcct = bizTmpMapper.selectBizTmpByRealId(instId, mchntAcctInfo.getId());
                bizTmpMchntAcct.setAuditStatus(auditStatus);
                InitParamUtil.initBizTempData(bizTmpMchntAcct, JSONObject.toJSONString(mchntAcctInfo));
                totalBizTmpList.add(bizTmpMchntAcct);
            }
        }

        //修改映像信息 -> 新增待审核
        MchntImageInfoMapper mchntImageInfoMapper = new MchntImageInfoMapperImpl();
        List<MchntImageInfo> commitImageInfoList = new ArrayList<>();
        List<MchntImageInfo> mchntImageInfoList = mchntImageInfoMapper.selectMchntImageInfoByMchntNo(instId, mchntBaseInfo.getMchntNo());
        if (!CollectionUtils.isEmpty(mchntImageInfoList)) {
            for (MchntImageInfo mchntImageInfo : mchntImageInfoList) {
                //商户映像信息表
                mchntImageInfo.setAuditStatus(auditStatus);
                commitImageInfoList.add(mchntImageInfo);
                //业务临时信息
                BizTmp bizTmpMchntImage = bizTmpMapper.selectBizTmpByRealId(instId, mchntImageInfo.getId());
                bizTmpMchntImage.setAuditStatus(auditStatus);
                InitParamUtil.initBizTempData(bizTmpMchntImage, JSONObject.toJSONString(mchntImageInfo));
                // totalBizTmpList.add(bizTmpMchntImage);
            }
        }

        //初始化微信，支付宝，银联商户信息
        //初始化微信商户信息表
        WechatMchntInfo wechatMchntInfo = null;
        if (wechatFlag) {
            wechatMchntInfo = getWechatMchntInfo(request, mchntBaseInfo, instId, createTime, auditStatus,
                    totalBizTmpList, appId, appKey, miniAppId, miniAppKey, independentEntryFlag,
                    mchntSignInfo, totalMchntProdInfoList);
        } else if (!CollectionUtils.isEmpty(totalFeeInfoList)) {
            List<MchntFeeInfo> wechatFeeList = totalFeeInfoList.stream().filter(item -> MchntFeeTypeEnum.WECHAT.getType().equals(item.getFeeType())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(wechatFeeList)) {
                wechatMchntInfo = getWechatMchntInfo(request, mchntBaseInfo, instId, createTime, auditStatus,
                        totalBizTmpList, appId, appKey, miniAppId, miniAppKey, independentEntryFlag,
                        mchntSignInfo, totalMchntProdInfoList);
            }
        }

        //初始化支付宝商户信息表
        AlipayMchntInfo alipayMchntInfo = null;
        if (aliFlag) {
            alipayMchntInfo = getAlipayMchntInfo(request, mchntBaseInfo, instId, createTime, auditStatus,
                    totalBizTmpList, mchntSignInfo, totalMchntProdInfoList);
        } else if (!CollectionUtils.isEmpty(totalFeeInfoList)) {
            List<MchntFeeInfo> aliFeeList = totalFeeInfoList.stream().filter(item -> MchntFeeTypeEnum.ALIPAY.getType().equals(item.getFeeType())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(aliFeeList)) {
                alipayMchntInfo = getAlipayMchntInfo(request, mchntBaseInfo, instId, createTime, auditStatus,
                        totalBizTmpList, mchntSignInfo, totalMchntProdInfoList);
            }
        }


        CupsMchntInfo cupsMchntInfo = null;
        //非独立维护不创建银联商户信息
        if (!BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
            CupsMchntInfoMapper cupsMchntInfoMapper = new CupsMchntInfoMapperImpl();
            cupsMchntInfo = cupsMchntInfoMapper.selectCupsMchntInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
            if (null == cupsMchntInfo) {
                //银联机构代码 通过商户基本信息的签约机构号查询机构管理表，获取联行号，根据联行号查询联行信息表
                SysParamMapper sysParamMapper = new SysParamMapperImpl();
                SysParam sysParam = sysParamMapper.selectSysParamByPrimaryKey(instId, BompAppParamConstant.MCHNT_PARAM_TYPE, BompAppParamConstant.CUPS_INSR_ID);
                if (null == sysParam) {
                    rglog.error("获取法人行在银联的机构号失败！instId:{}，", instId);
                    throw new BizException(RespCodeEnum.MCHNT_INFO_NOT_FOUND.getRespCode(), RespCodeEnum.MCHNT_INFO_NOT_FOUND.getRespDesc());
                }

                RegionInfoMapper regionInfoMapper = new RegionInfoMapperImpl();
                //通过商户所在区查询银联地区代码
                RegionInfo regionInfo = regionInfoMapper.selectRegionInfoByPrimaryKey(mchntBaseInfo.getMchntBizRegion());
                String cupsArea = null;
                if (null != regionInfo && !StringUtil.isEmptyOrNull(regionInfo.getAreaCode())) {
                    cupsArea = regionInfo.getAreaCode();
                } else {
                    //通过商户所在市查询银联地区代码
                    regionInfo = regionInfoMapper.selectRegionInfoByPrimaryKey(mchntBaseInfo.getMchntBizCity());
                    if (null != regionInfo && !StringUtil.isEmptyOrNull(regionInfo.getAreaCode())) {
                        cupsArea = regionInfo.getAreaCode();
                    }
                }

                cupsMchntInfo = InitParamUtil.initCupsMchntInfoByCreate(request, mchntBaseInfo, sysParam.getParamValue(), cupsArea, auditStatus, createTime);
                if (!StringUtil.isEmptyOrNull(cupsChannelMchntNo)) {
                    cupsMchntInfo.setCupsChannelMchntNo(cupsChannelMchntNo);
                }
                BizTmp bizTmpCupsMchnt = initBizTmpByCreate(mchntBaseInfo, cupsMchntInfo.getId(),
                        JSONObject.toJSONString(cupsMchntInfo), TableNameConstant.T_B_CUPS_MCHNT_INFO,
                        auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
                totalBizTmpList.add(bizTmpCupsMchnt);
            } else {
                if (!StringUtil.isEmptyOrNull(cupsChannelMchntNo)) {
                    cupsMchntInfo.setCupsChannelMchntNo(cupsChannelMchntNo);
                }
                BizTmp bizTmpCupsMchnt = initBizTmpByCreate(mchntBaseInfo, cupsMchntInfo.getId(),
                        JSONObject.toJSONString(cupsMchntInfo), TableNameConstant.T_B_CUPS_MCHNT_INFO,
                        auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
                totalBizTmpList.add(bizTmpCupsMchnt);
            }
        }


        /* 将数据统一修改为 新增待审核 */
        MchntManageOperationService mchntManageOperationService = new MchntManageOperationServiceImpl();
        mchntManageOperationService.addMchntProdInfoDb(mchntBaseInfo, totalBizTmpList, null, totalMchntProdInfoList,
                totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, wechatMchntInfo, alipayMchntInfo, cupsMchntInfo,
                mchntSignInfo, commitAcctInfoList, commitImageInfoList);
    }


    /**
     * 修改商户产品信息
     *
     * @param request 请求
     * @throws Exception 异常
     */
    private void modifyCommitMchntProdInfoByModify(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo) throws Exception {
        XmlTreeUtil xmlTreeUtil = new XmlTreeUtil();
        List<BaseProdBean> baseProdBeanList = request.getBaseProdBeanList();
        String instId = xmlTreeUtil.getXmlTreeStringValue(TreeNodeConstant.INST_ID);
        String updateTime = DateUtil.getCurrentDateTime(InitParamUtil.yyyy_MM_dd_HHmmssSSS);
        //修改待审核
        String auditStatus = AuditStatusEnum.MODIFY_BE_AUDIT.getAuditStatus();
        String bizOpr = "U";
        List<MchntProdInfo> totalMchntProdInfoList = new ArrayList<>();
        List<MchntFeeInfo> totalFeeInfoList = new ArrayList<>();
        List<MchntStageInfo> totalStageInfoList = new ArrayList<>();
        List<MchntAuthCtrl> totalAuthCtrlList = new ArrayList<>();
        List<BizTmp> totalBizTmpList = new ArrayList<>();
        BizTmpMapper bizTmpMapper = new BizTmpMapperImpl();

        String cupsChannelMchntNo = null;

        String appId = null;
        String appKey = null;
        String miniAppId = null;
        String miniAppKey = null;
        String mchntSignType = null;
        String independentEntryFlag = null;
        boolean wechatFlag = false;
        boolean aliFlag = false;

        //MCMP H5上送 全部
        if (!CollectionUtils.isEmpty(baseProdBeanList)) {

            MchntManageOperationService mchntManageOperationService = new MchntManageOperationServiceImpl();
            for (BaseProdBean facadeBaseProd : baseProdBeanList) {
                if (BaseProdEnum.BASIC.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    //基础产品 - 00 基础公共不需要存入库，H5会上送但不需要处理
                    continue;
                }

                if (BaseProdEnum.BANK_CARD_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    if (!StringUtil.isEmptyOrNull(facadeBaseProd.getCupsChannelMchntNo())) {
                        cupsChannelMchntNo = facadeBaseProd.getCupsChannelMchntNo();
                    }
                    mchntSignType = facadeBaseProd.getMchntSignType();
                } else if (BaseProdEnum.WECHAT_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    appId = facadeBaseProd.getWechatAppid();
                    appKey = facadeBaseProd.getWechatAppidKey();
                    miniAppId = facadeBaseProd.getWechatMiniAppid();
                    miniAppKey = facadeBaseProd.getWechatMiniAppidKey();
                    independentEntryFlag = facadeBaseProd.getWechatSelfEntryFlag();
                    wechatFlag = true;
                } else if (BaseProdEnum.ALIPAY_PAY.getProdCode().equals(facadeBaseProd.getBaseProdCode())) {
                    aliFlag = true;
                }

                if (ADD_OPR.equals(facadeBaseProd.getOprType())) {
                    mchntManageOperationService.addBaseProdInfoByModifySingleSave(request, mchntBaseInfo, auditStatus, updateTime, totalMchntProdInfoList, totalBizTmpList, facadeBaseProd);
                } else if (MODIFY_OPR.equals(facadeBaseProd.getOprType())) {
                    mchntManageOperationService.modifyBaseProdInfoByModifySingleSave(request, mchntBaseInfo, auditStatus, updateTime, totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                } else if (DELETE_OPR.equals(facadeBaseProd.getOprType())) {
                    mchntManageOperationService.deleteBaseProdInfo(request, mchntBaseInfo, auditStatus, updateTime, totalMchntProdInfoList, totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
                }
            }
        }


        //校验特殊费率
        verifySpecialFee(totalBizTmpList, mchntBaseInfo);

        //修改商户基本信息 -> 修改待审核
        if (!ChangeNextStatusUtil.isAllowModifyData(mchntBaseInfo.getAuditStatus())) {
            rglog.error("管理商户产品信息失败,该商户基本信息不允许修改！，instId:{},mchntNo:{},auditStatus:{}",
                    mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getAuditStatus());
            throw new BizException(RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespCode(), RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespDesc());
        }


        //修改商户基本信息 -> 签约类型
        mchntBaseInfo.setAuditStatus(auditStatus);
        mchntBaseInfo.setLastOprId(request.getUserId());
        mchntBaseInfo.setLastUpdateTime(updateTime);
        if (!StringUtil.isEmptyOrNull(mchntSignType) && !mchntSignType.equals(mchntBaseInfo.getMchntSignType())) {
            if (AuditStatusEnum.MODIFY_BE_COMMIT_AUDIT.getAuditStatus().equals(mchntBaseInfo.getAuditStatus())) {
                BizTmp bizTmpMchntBase = bizTmpMapper.selectBizTmpByRealId(instId, mchntBaseInfo.getId());
                if (null == bizTmpMchntBase) {
                    bizTmpMchntBase = new BizTmp();
                    ConvertUtil.convertOutput(bizTmpMchntBase);
                    BeanUtil.beanCopy(mchntBaseInfo, bizTmpMchntBase);
                    bizTmpMchntBase.setManageInstId(mchntBaseInfo.getSignInstId());
                    bizTmpMchntBase.setRealId(mchntBaseInfo.getId());
                    bizTmpMchntBase.setOprTableEname(TableNameConstant.T_B_MCHNT_BASE_INFO);
                    bizTmpMchntBase.setDetailFlag(BompAppParamConstant.FLAG_N);
                    bizTmpMchntBase.setMasterShowFlag(BompAppParamConstant.FLAG_Y);
                    bizTmpMchntBase.setMasterKey(mchntBaseInfo.getId());
                    bizTmpMchntBase.setAuditStatus(auditStatus);
                    bizTmpMchntBase.setLastOprId(request.getUserId());
                    bizTmpMchntBase.setLastUpdateTime(updateTime);
                }
                bizTmpMchntBase.setBizOpr(bizOpr);
                String mchntJson = InitParamUtil.getJsonString(bizTmpMchntBase);
                MchntBaseInfo modifyMchntInfo = JSON.parseObject(mchntJson, MchntBaseInfo.class);
                //商户签约类型
                modifyMchntInfo.setAuditStatus(auditStatus);
                modifyMchntInfo.setMchntSignType(mchntSignType);
                InitParamUtil.initBizTempData(bizTmpMchntBase, JSONObject.toJSONString(modifyMchntInfo));
                bizTmpMchntBase.setAuditStatus(auditStatus);
                totalBizTmpList.add(bizTmpMchntBase);
            } else {
                //修改商户基本信息
                MchntBaseInfo modifyMchntInfo = new MchntBaseInfo();
                BeanUtil.beanCopy(mchntBaseInfo, modifyMchntInfo);
                modifyMchntInfo.setMchntSignType(mchntSignType);
                modifyMchntInfo.setAuditStatus(auditStatus);
                BizTmp bizTmpMchntBase = bizTmpMapper.selectBizTmpByRealId(instId, mchntBaseInfo.getId());
                if (null == bizTmpMchntBase) {
                    bizTmpMchntBase = new BizTmp();
                    ConvertUtil.convertOutput(bizTmpMchntBase);
                    BeanUtil.beanCopy(mchntBaseInfo, bizTmpMchntBase);
                    bizTmpMchntBase.setManageInstId(mchntBaseInfo.getSignInstId());
                    bizTmpMchntBase.setRealId(mchntBaseInfo.getId());
                    bizTmpMchntBase.setOprTableEname(TableNameConstant.T_B_MCHNT_BASE_INFO);
                    bizTmpMchntBase.setDetailFlag(BompAppParamConstant.FLAG_N);
                    bizTmpMchntBase.setMasterShowFlag(BompAppParamConstant.FLAG_Y);
                    bizTmpMchntBase.setMasterKey(mchntBaseInfo.getId());
                    bizTmpMchntBase.setAuditStatus(auditStatus);
                    bizTmpMchntBase.setLastOprId(request.getUserId());
                    bizTmpMchntBase.setLastUpdateTime(updateTime);
                }
                bizTmpMchntBase.setBizOpr(bizOpr);
                bizTmpMchntBase.setAuditStatus(auditStatus);
                bizTmpMchntBase.setLastUpdateTime(updateTime);
                bizTmpMchntBase.setLastOprId(request.getUserId());
                InitParamUtil.initBizTempData(bizTmpMchntBase, JSONObject.toJSONString(modifyMchntInfo));
                totalBizTmpList.add(bizTmpMchntBase);
            }
        } else {
            BizTmp bizTmpMchntBase = bizTmpMapper.selectBizTmpByRealId(instId, mchntBaseInfo.getId());
            if (null == bizTmpMchntBase) {
                bizTmpMchntBase = new BizTmp();
                ConvertUtil.convertOutput(bizTmpMchntBase);
                BeanUtil.beanCopy(mchntBaseInfo, bizTmpMchntBase);
                bizTmpMchntBase.setManageInstId(mchntBaseInfo.getSignInstId());
                bizTmpMchntBase.setRealId(mchntBaseInfo.getId());
                bizTmpMchntBase.setOprTableEname(TableNameConstant.T_B_MCHNT_BASE_INFO);
                bizTmpMchntBase.setDetailFlag(BompAppParamConstant.FLAG_N);
                bizTmpMchntBase.setMasterShowFlag(BompAppParamConstant.FLAG_Y);
                bizTmpMchntBase.setMasterKey(mchntBaseInfo.getId());
                bizTmpMchntBase.setAuditStatus(auditStatus);
                bizTmpMchntBase.setLastOprId(request.getUserId());
                bizTmpMchntBase.setLastUpdateTime(updateTime);
                bizTmpMchntBase.setBizOpr(bizOpr);
                InitParamUtil.initBizTempData(bizTmpMchntBase, JSONObject.toJSONString(mchntBaseInfo));
            } else {
                String mchntJson = InitParamUtil.getJsonString(bizTmpMchntBase);
                MchntBaseInfo modifyMchntInfo = JSON.parseObject(mchntJson, MchntBaseInfo.class);
                //商户签约类型
                modifyMchntInfo.setAuditStatus(auditStatus);
                InitParamUtil.initBizTempData(bizTmpMchntBase, JSONObject.toJSONString(modifyMchntInfo));
            }
            bizTmpMchntBase.setBizOpr(bizOpr);
            bizTmpMchntBase.setAuditStatus(auditStatus);
            bizTmpMchntBase.setLastUpdateTime(updateTime);
            bizTmpMchntBase.setLastOprId(request.getUserId());
            totalBizTmpList.add(bizTmpMchntBase);
        }

        //修改签约信息 -> 修改待审核
        MchntSignInfoMapper mchntSignInfoMapper = new MchntSignInfoMapperImpl();
        MchntSignInfo mchntSignInfo = mchntSignInfoMapper.selectMchntSignInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        if (!ChangeNextStatusUtil.isAllowModifyData(mchntSignInfo.getAuditStatus())) {
            rglog.error("管理商户产品信息失败,该商户签约信息不允许修改！，instId:{},mchntNo:{},audisStatus:{}",
                    mchntSignInfo.getInstId(), mchntSignInfo.getMchntNo(), mchntSignInfo.getAuditStatus());
            throw new BizException(RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespCode(), RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespDesc());
        }
        mchntSignInfo.setAuditStatus(auditStatus);
        mchntSignInfo.setLastOprId(request.getUserId());
        mchntSignInfo.setLastUpdateTime(updateTime);
        BizTmp bizTmpMchntSign = bizTmpMapper.selectBizTmpByRealId(instId, mchntSignInfo.getId());
        if (null == bizTmpMchntSign) {
            bizTmpMchntSign = new BizTmp();
            ConvertUtil.convertOutput(bizTmpMchntSign);
            BeanUtil.beanCopy(mchntBaseInfo, bizTmpMchntSign);
            BeanUtil.beanCopy(mchntSignInfo, bizTmpMchntSign);
            bizTmpMchntSign.setManageInstId(mchntBaseInfo.getSignInstId());
            bizTmpMchntSign.setRealId(mchntSignInfo.getId());
            bizTmpMchntSign.setOprTableEname(TableNameConstant.T_B_MCHNT_SIGN_INFO);
            bizTmpMchntSign.setDetailFlag(BompAppParamConstant.FLAG_Y);
            bizTmpMchntSign.setMasterShowFlag(BompAppParamConstant.FLAG_N);
            bizTmpMchntSign.setMasterKey(mchntBaseInfo.getId());
            bizTmpMchntSign.setAuditStatus(auditStatus);
            bizTmpMchntSign.setLastOprId(request.getUserId());
            bizTmpMchntSign.setLastUpdateTime(updateTime);
            bizTmpMchntSign.setBizOpr(bizOpr);
            InitParamUtil.initBizTempData(bizTmpMchntSign, JSONObject.toJSONString(mchntSignInfo));
        } else {
            String signJson = InitParamUtil.getJsonString(bizTmpMchntSign);
            MchntSignInfo modifySignInfo = JSON.parseObject(signJson, MchntSignInfo.class);
            modifySignInfo.setAuditStatus(auditStatus);
            InitParamUtil.initBizTempData(bizTmpMchntSign, JSONObject.toJSONString(modifySignInfo));

        }
        bizTmpMchntSign.setAuditStatus(auditStatus);
        bizTmpMchntSign.setBizOpr(bizOpr);
        bizTmpMchntSign.setLastOprId(request.getUserId());
        bizTmpMchntSign.setLastUpdateTime(updateTime);
        totalBizTmpList.add(bizTmpMchntSign);


        //修改结算信息 -> 修改待审核
        MchntAcctInfoMapper mchntAcctInfoMapper = new MchntAcctInfoMapperImpl();
        List<MchntAcctInfo> commitAcctInfoList = new ArrayList<>();
        if (!BompAppParamConstant.FLAG_N.equals(mchntBaseInfo.getIndependentDataFlag())) {
            List<BizTmp> mchntAcctInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_ACCT_INFO);
            if (CollectionUtils.isEmpty(mchntAcctInfoBizTmpList)) {
                List<MchntAcctInfo> mchntAcctInfoList = mchntAcctInfoMapper.selectMchntAcctInfoByMchntNo(instId, mchntBaseInfo.getMchntNo());
                if (!CollectionUtils.isEmpty(mchntAcctInfoList)) {
                    for (MchntAcctInfo item : mchntAcctInfoList) {
                        BizTmp bizAcct = bizTmpMapper.selectBizTmpByRealId(instId, item.getId());
                        if (null == bizAcct) {
                            bizAcct = new BizTmp();
                            ConvertUtil.convertOutput(bizAcct);
                            BeanUtil.beanCopy(mchntBaseInfo, bizAcct);
                            BeanUtil.beanCopy(item, bizAcct);
                            bizAcct.setManageInstId(mchntBaseInfo.getSignInstId());
                            bizAcct.setRealId(item.getId());
                            bizAcct.setOprTableEname(TableNameConstant.T_B_MCHNT_ACCT_INFO);
                            bizAcct.setDetailFlag(BompAppParamConstant.FLAG_Y);
                            bizAcct.setMasterShowFlag(BompAppParamConstant.FLAG_N);
                            bizAcct.setMasterKey(mchntBaseInfo.getId());
                            bizAcct.setAuditStatus(auditStatus);
                            bizAcct.setLastOprId(request.getUserId());
                            bizAcct.setLastUpdateTime(updateTime);
                            bizAcct.setBizOpr(bizOpr);
                            InitParamUtil.initBizTempData(bizAcct, JSONObject.toJSONString(item));
                            totalBizTmpList.add(bizAcct);
                        }
                    }
                }
            } else {
                for (BizTmp mchntAcctInfoBizTmp : mchntAcctInfoBizTmpList) {
                    String acctJson = InitParamUtil.getJsonString(mchntAcctInfoBizTmp);
                    MchntAcctInfo modifyAcctInfo = JSON.parseObject(acctJson, MchntAcctInfo.class);
                    modifyAcctInfo.setAuditStatus(auditStatus);
                    modifyAcctInfo.setLastUpdateTime(updateTime);

                    MchntAcctInfo dbAcctInfo = mchntAcctInfoMapper.selectMchntAcctInfoById(instId, modifyAcctInfo.getId());
                    if (null != dbAcctInfo) {
                        dbAcctInfo.setAuditStatus(auditStatus);
                        dbAcctInfo.setLastOprId(request.getUserId());
                        dbAcctInfo.setLastUpdateTime(updateTime);
                        commitAcctInfoList.add(dbAcctInfo);
                    }

                    mchntAcctInfoBizTmp.setAuditStatus(auditStatus);
                    mchntAcctInfoBizTmp.setLastOprId(request.getUserId());
                    mchntAcctInfoBizTmp.setLastAuditTime(updateTime);
                    mchntAcctInfoBizTmp.setLastUpdateTime(updateTime);
                    mchntAcctInfoBizTmp.setBizOpr(bizOpr);
                    InitParamUtil.initBizTempData(mchntAcctInfoBizTmp, JSONObject.toJSONString(modifyAcctInfo));
                    totalBizTmpList.add(mchntAcctInfoBizTmp);
                }
            }
        }

        //修改映像信息 -> 新增待审核
        MchntImageInfoMapper mchntImageInfoMapper = new MchntImageInfoMapperImpl();
        List<MchntImageInfo> commitImageInfoList = new ArrayList<>();
        List<BizTmp> mchntImageInfoBizTmpList = bizTmpMapper.selectBizTmpByMchntNo(mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_MCHNT_IMAGE_INFO);
        if (CollectionUtils.isEmpty(mchntImageInfoBizTmpList)) {
            List<MchntImageInfo> mchntImageInfoList = mchntImageInfoMapper.selectMchntImageInfoByMchntNo(instId, mchntBaseInfo.getMchntNo());
            if (!CollectionUtils.isEmpty(mchntImageInfoList)) {
                for (MchntImageInfo item : mchntImageInfoList) {
                    BizTmp bizImage = bizTmpMapper.selectBizTmpByRealId(instId, item.getId());
                    if (null == bizImage) {
                        bizImage = new BizTmp();
                        ConvertUtil.convertOutput(bizImage);
                        BeanUtil.beanCopy(mchntBaseInfo, bizImage);
                        BeanUtil.beanCopy(item, bizImage);
                        bizImage.setManageInstId(mchntBaseInfo.getSignInstId());
                        bizImage.setRealId(item.getId());
                        bizImage.setOprTableEname(TableNameConstant.T_B_MCHNT_IMAGE_INFO);
                        bizImage.setDetailFlag(BompAppParamConstant.FLAG_Y);
                        bizImage.setMasterShowFlag(BompAppParamConstant.FLAG_N);
                        bizImage.setMasterKey(mchntBaseInfo.getId());
                        bizImage.setAuditStatus(auditStatus);
                        bizImage.setLastOprId(request.getUserId());
                        bizImage.setLastUpdateTime(updateTime);
                        bizImage.setBizOpr(bizOpr);
                        InitParamUtil.initBizTempData(bizImage, JSONObject.toJSONString(item));
                        totalBizTmpList.add(bizImage);
                    }
                }
            }
        } else {
            for (BizTmp mchntImageInfoBizTmp : mchntImageInfoBizTmpList) {
                String imageJson = InitParamUtil.getJsonString(mchntImageInfoBizTmp);
                MchntImageInfo modifyImageInfo = JSON.parseObject(imageJson, MchntImageInfo.class);
                modifyImageInfo.setAuditStatus(auditStatus);
                modifyImageInfo.setLastOprId(request.getUserId());
                modifyImageInfo.setLastUpdateTime(updateTime);

                MchntImageInfo dbImageInfo = mchntImageInfoMapper.selectMchntImageInfoById(instId, modifyImageInfo.getId());
                if (null != dbImageInfo) {
                    dbImageInfo.setAuditStatus(auditStatus);
                    dbImageInfo.setLastOprId(request.getUserId());
                    dbImageInfo.setLastUpdateTime(updateTime);
                    commitImageInfoList.add(dbImageInfo);
                }

                mchntImageInfoBizTmp.setAuditStatus(auditStatus);
                mchntImageInfoBizTmp.setLastOprId(request.getUserId());
                mchntImageInfoBizTmp.setLastAuditTime(updateTime);
                mchntImageInfoBizTmp.setLastUpdateTime(updateTime);
                mchntImageInfoBizTmp.setBizOpr(bizOpr);
                InitParamUtil.initBizTempData(mchntImageInfoBizTmp, JSONObject.toJSONString(modifyImageInfo));
                totalBizTmpList.add(mchntImageInfoBizTmp);
            }
        }

        WechatMchntInfoMapper wechatMchntInfoMapper = new WechatMchntInfoMapperImpl();
        WechatMchntInfo wechatMchntInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        if (null != wechatMchntInfo) {
            if (!ChangeNextStatusUtil.isAllowModifyData(wechatMchntInfo.getAuditStatus())) {
                rglog.error("管理商户产品信息失败,该商户微信信息不允许修改！，instId:{},mchntNo:{},audisStatus:{}",
                        wechatMchntInfo.getInstId(), wechatMchntInfo.getMchntNo(), wechatMchntInfo.getAuditStatus());
                throw new BizException(RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespCode(), RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespDesc());
            }
            wechatMchntInfo.setAuditStatus(auditStatus);
            wechatMchntInfo.setLastOprId(request.getUserId());
            wechatMchntInfo.setLastUpdateTime(updateTime);

            WechatMchntInfo modifyWechat = new WechatMchntInfo();
            BeanUtil.beanCopy(wechatMchntInfo, modifyWechat);
            if (!StringUtil.isEmptyOrNull(appId)) {
                modifyWechat.setAppId(appId);
            }
            if (!StringUtil.isEmptyOrNull(appKey)) {
                modifyWechat.setAppSecretKey(appKey);
            }
            if (!StringUtil.isEmptyOrNull(miniAppId)) {
                modifyWechat.setMiniAppId(miniAppId);
            }
            if (!StringUtil.isEmptyOrNull(miniAppKey)) {
                modifyWechat.setMiniSecretKey(miniAppKey);
            }
            if (!StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                //通道费率类型
                modifyWechat.setDstChannelType(request.getWechatChannelId());
            }

            BizTmp bizTmpWechatMchnt = bizTmpMapper.selectBizTmpByRealId(instId, wechatMchntInfo.getId());
            if (null == bizTmpWechatMchnt) {
                bizTmpWechatMchnt = new BizTmp();
                ConvertUtil.convertOutput(bizTmpWechatMchnt);
                BeanUtil.beanCopy(mchntBaseInfo, bizTmpWechatMchnt);
                BeanUtil.beanCopy(wechatMchntInfo, bizTmpWechatMchnt);
                bizTmpWechatMchnt.setManageInstId(mchntBaseInfo.getSignInstId());
                bizTmpWechatMchnt.setRealId(wechatMchntInfo.getId());
                bizTmpWechatMchnt.setOprTableEname(TableNameConstant.T_B_WECHAT_MCHNT_INFO);
                bizTmpWechatMchnt.setDetailFlag(BompAppParamConstant.FLAG_Y);
                bizTmpWechatMchnt.setMasterShowFlag(BompAppParamConstant.FLAG_N);
                bizTmpWechatMchnt.setMasterKey(mchntBaseInfo.getId());
                bizTmpWechatMchnt.setAuditStatus(auditStatus);
                bizTmpWechatMchnt.setLastOprId(request.getUserId());
                bizTmpWechatMchnt.setLastUpdateTime(updateTime);
                bizTmpWechatMchnt.setBizOpr(bizOpr);
            }
            bizTmpWechatMchnt.setAuditStatus(auditStatus);
            bizTmpWechatMchnt.setBizOpr(bizOpr);
            bizTmpWechatMchnt.setLastOprId(request.getUserId());
            bizTmpWechatMchnt.setLastUpdateTime(updateTime);
            InitParamUtil.initBizTempData(bizTmpWechatMchnt, JSONObject.toJSONString(modifyWechat));
            totalBizTmpList.add(bizTmpWechatMchnt);
        } else {
            if (wechatFlag) {
                initWechatMchntByModify(request, mchntBaseInfo, instId, updateTime, auditStatus, totalMchntProdInfoList, totalBizTmpList, bizTmpMapper, appId, appKey, miniAppId, miniAppKey, independentEntryFlag, mchntSignInfo, wechatMchntInfoMapper);
            } else {
                List<BizTmp> feeBizList = totalBizTmpList.stream().filter(item -> TableNameConstant.T_B_MCHNT_FEE_INFO.equals(item.getOprTableEname())).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(feeBizList)) {
                    List<MchntFeeInfo> feeInfoList = feeBizList.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntFeeInfo.class)).collect(Collectors.toList());
                    List<MchntFeeInfo> wechatFeeList = feeInfoList.stream().filter(item -> MchntFeeTypeEnum.WECHAT.getType().equals(item.getFeeType())).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(wechatFeeList)) {
                        initWechatMchntByModify(request, mchntBaseInfo, instId, updateTime, auditStatus, totalMchntProdInfoList, totalBizTmpList, bizTmpMapper, appId, appKey, miniAppId, miniAppKey, independentEntryFlag, mchntSignInfo, wechatMchntInfoMapper);
                    }
                }
            }
        }

        AlipayMchntInfoMapper alipayMchntInfoMapper = new AlipayMchntInfoMapperImpl();
        AlipayMchntInfo alipayMchntInfo = alipayMchntInfoMapper.selectAlipayMchntInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        if (null != alipayMchntInfo) {
            if (!ChangeNextStatusUtil.isAllowModifyData(alipayMchntInfo.getAuditStatus())) {
                rglog.error("管理商户产品信息失败,该商户支付宝信息不允许修改！，instId:{},mchntNo:{},audisStatus:{}",
                        alipayMchntInfo.getInstId(), alipayMchntInfo.getMchntNo(), alipayMchntInfo.getAuditStatus());
                throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
            }
            alipayMchntInfo.setAuditStatus(auditStatus);
            alipayMchntInfo.setLastOprId(request.getUserId());
            alipayMchntInfo.setLastUpdateTime(updateTime);
            BizTmp bizTmpAlipayMchnt = bizTmpMapper.selectBizTmpByRealId(instId, alipayMchntInfo.getId());
            if (null == bizTmpAlipayMchnt) {
                bizTmpAlipayMchnt = new BizTmp();
                ConvertUtil.convertOutput(bizTmpAlipayMchnt);
                BeanUtil.beanCopy(mchntBaseInfo, bizTmpAlipayMchnt);
                BeanUtil.beanCopy(alipayMchntInfo, bizTmpAlipayMchnt);
                bizTmpAlipayMchnt.setManageInstId(mchntBaseInfo.getSignInstId());
                bizTmpAlipayMchnt.setRealId(alipayMchntInfo.getId());
                bizTmpAlipayMchnt.setOprTableEname(TableNameConstant.T_B_ALPAY_MCHNT_INFO);
                bizTmpAlipayMchnt.setDetailFlag(BompAppParamConstant.FLAG_Y);
                bizTmpAlipayMchnt.setMasterShowFlag(BompAppParamConstant.FLAG_N);
                bizTmpAlipayMchnt.setMasterKey(mchntBaseInfo.getId());
                bizTmpAlipayMchnt.setAuditStatus(auditStatus);
                bizTmpAlipayMchnt.setLastOprId(request.getUserId());
                bizTmpAlipayMchnt.setLastUpdateTime(updateTime);
                bizTmpAlipayMchnt.setBizOpr(bizOpr);
            }
            bizTmpAlipayMchnt.setAuditStatus(auditStatus);
            bizTmpAlipayMchnt.setBizOpr(bizOpr);
            bizTmpAlipayMchnt.setLastOprId(request.getUserId());
            bizTmpAlipayMchnt.setLastUpdateTime(updateTime);
            InitParamUtil.initBizTempData(bizTmpAlipayMchnt, JSONObject.toJSONString(alipayMchntInfo));
            totalBizTmpList.add(bizTmpAlipayMchnt);
        } else {
            //支付宝商户为空，则判断是否上送支付宝产品或费率是否存在支付宝费率
            if (aliFlag) {
                initAlipayMchntByModify(request, mchntBaseInfo, instId, updateTime, totalMchntProdInfoList, totalBizTmpList, auditStatus, bizTmpMapper, mchntSignInfo);
            } else {
                List<BizTmp> feeBizList = totalBizTmpList.stream().filter(item -> TableNameConstant.T_B_MCHNT_FEE_INFO.equals(item.getOprTableEname())).collect(Collectors.toList());
                if (!CollectionUtils.isEmpty(feeBizList)) {
                    List<MchntFeeInfo> feeInfoList = feeBizList.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntFeeInfo.class)).collect(Collectors.toList());
                    List<MchntFeeInfo> aliFeeList = feeInfoList.stream().filter(item -> MchntFeeTypeEnum.ALIPAY.getType().equals(item.getFeeType())).collect(Collectors.toList());
                    if (!CollectionUtils.isEmpty(aliFeeList)) {
                        initAlipayMchntByModify(request, mchntBaseInfo, instId, updateTime, totalMchntProdInfoList, totalBizTmpList, auditStatus, bizTmpMapper, mchntSignInfo);
                    }
                }
            }
        }

        CupsMchntInfoMapper cupsMchntInfoMapper = new CupsMchntInfoMapperImpl();
        CupsMchntInfo cupsMchntInfo = cupsMchntInfoMapper.selectCupsMchntInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        if (null != cupsMchntInfo) {
            if (!ChangeNextStatusUtil.isAllowModifyData(cupsMchntInfo.getAuditStatus())) {
                rglog.error("管理商户产品信息失败,该商户银联信息不允许修改！，instId:{},mchntNo:{},audisStatus:{}",
                        cupsMchntInfo.getInstId(), cupsMchntInfo.getMchntNo(), cupsMchntInfo.getAuditStatus());
                throw new BizException(RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespCode(), RespCodeEnum.MCHNT_STATUS_ABNORMAL.getRespDesc());
            }
            cupsMchntInfo.setAuditStatus(auditStatus);
            cupsMchntInfo.setLastOprId(request.getUserId());
            cupsMchntInfo.setLastUpdateTime(updateTime);

            CupsMchntInfo newCupsMchntInfo = new CupsMchntInfo();
            BeanUtil.beanCopy(cupsMchntInfo, newCupsMchntInfo);
            if (!StringUtil.isEmptyOrNull(cupsChannelMchntNo)) {
                if (!StringUtil.isEmptyOrNull(cupsMchntInfo.getCupsChannelMchntNo())) {
                    //原有数据
                    Map<String, String> newMchntNo = JSON.parseObject(cupsChannelMchntNo, Map.class);
                    Map<String, String> oldCupsMap = JSON.parseObject(cupsMchntInfo.getCupsChannelMchntNo(), Map.class);
                    oldCupsMap.putAll(newMchntNo);
                    newCupsMchntInfo.setCupsChannelMchntNo(JSONObject.toJSONString(oldCupsMap));
                } else {
                    newCupsMchntInfo.setCupsChannelMchntNo(cupsChannelMchntNo);
                }

            }
            BizTmp bizTmpCupsMchnt = bizTmpMapper.selectBizTmpByRealId(instId, cupsMchntInfo.getId());
            if (null == bizTmpCupsMchnt) {
                bizTmpCupsMchnt = new BizTmp();
                ConvertUtil.convertOutput(bizTmpCupsMchnt);
                BeanUtil.beanCopy(mchntBaseInfo, bizTmpCupsMchnt);
                BeanUtil.beanCopy(cupsMchntInfo, bizTmpCupsMchnt);
                bizTmpCupsMchnt.setManageInstId(mchntBaseInfo.getSignInstId());
                bizTmpCupsMchnt.setRealId(cupsMchntInfo.getId());
                bizTmpCupsMchnt.setOprTableEname(TableNameConstant.T_B_CUPS_MCHNT_INFO);
                bizTmpCupsMchnt.setDetailFlag(BompAppParamConstant.FLAG_Y);
                bizTmpCupsMchnt.setMasterShowFlag(BompAppParamConstant.FLAG_N);
                bizTmpCupsMchnt.setMasterKey(mchntBaseInfo.getId());
                bizTmpCupsMchnt.setAuditStatus(auditStatus);
                bizTmpCupsMchnt.setLastOprId(request.getUserId());
                bizTmpCupsMchnt.setLastUpdateTime(updateTime);
                bizTmpCupsMchnt.setBizOpr(bizOpr);
            }
            bizTmpCupsMchnt.setAuditStatus(auditStatus);
            bizTmpCupsMchnt.setBizOpr(bizOpr);
            bizTmpCupsMchnt.setLastOprId(request.getUserId());
            bizTmpCupsMchnt.setLastUpdateTime(updateTime);
            InitParamUtil.initBizTempData(bizTmpCupsMchnt, JSONObject.toJSONString(newCupsMchntInfo));
            totalBizTmpList.add(bizTmpCupsMchnt);
        }


        /* 将数据统一修改为 修改待审核 */
        MchntManageOperationService mchntManageOperationService = new MchntManageOperationServiceImpl();
        mchntManageOperationService.modifyOrAuditMchntInfoDb(request, mchntBaseInfo, totalBizTmpList, null, totalMchntProdInfoList,
                totalFeeInfoList, totalStageInfoList, totalAuthCtrlList, wechatMchntInfo, alipayMchntInfo, cupsMchntInfo,
                mchntSignInfo, commitAcctInfoList, commitImageInfoList);

    }

    private void initWechatMchntByModify(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String instId, String updateTime, String auditStatus, List<MchntProdInfo> totalMchntProdInfoList, List<BizTmp> totalBizTmpList, BizTmpMapper bizTmpMapper, String appId, String appKey, String miniAppId, String miniAppKey, String independentEntryFlag, MchntSignInfo mchntSignInfo, WechatMchntInfoMapper wechatMchntInfoMapper) throws Exception {
        //微信商户信息为空，则判断是否上送微信产品或费率是否存在微信费率
        //判断是否临时表有数据
        List<BizTmp> bizTmpWechatMchntList = bizTmpMapper.selectBizTmpByMchntNo(instId, mchntBaseInfo.getMchntNo(), TableNameConstant.T_B_WECHAT_MCHNT_INFO);
        if (CollectionUtils.isEmpty(bizTmpWechatMchntList)) {
            //新增微信商户信息
            //初始化微信商户信息表
            getWechatMchntInfo(request, mchntBaseInfo, instId, updateTime, auditStatus,
                    totalBizTmpList, appId, appKey, miniAppId, miniAppKey, independentEntryFlag,
                    mchntSignInfo, totalMchntProdInfoList);
        } else {
            //临时表存在微信商户信息
            WechatMchntInfo wechatInfo = JSON.parseObject(InitParamUtil.getJsonString(bizTmpWechatMchntList.get(0)), WechatMchntInfo.class);
            if (!StringUtil.isEmptyOrNull(appId)) {
                wechatInfo.setAppId(appId);
            }
            if (!StringUtil.isEmptyOrNull(appKey)) {
                wechatInfo.setAppSecretKey(appKey);
            }
            if (!StringUtil.isEmptyOrNull(miniAppId)) {
                wechatInfo.setMiniAppId(miniAppId);
            }
            if (!StringUtil.isEmptyOrNull(miniAppKey)) {
                wechatInfo.setMiniSecretKey(miniAppKey);
            }
            if (!StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                //通道费率类型
                wechatInfo.setDstChannelType(request.getWechatChannelId());
            }

            if (AppParamConstant.NO.equals(independentEntryFlag) && !StringUtil.isEmptyOrNull(mchntBaseInfo.getPlatMchntNo())) {
                //平台商户下的商户，可选择不进行微信进件 使用平台商户的微信商户号及其他信息
                WechatMchntInfo platWechatInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntBaseInfo.getPlatMchntNo());
                if (null != platWechatInfo) {
                    wechatInfo.setWechatMchntNo(platWechatInfo.getWechatMchntNo());
                }
            }

            if (StringUtil.isEmptyOrNull(wechatInfo.getDstChannelType())) {
                List<MchntProdInfo> wechatProd = totalMchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getWechatChannelId())).collect(Collectors.toList());
                wechatInfo.setDstChannelType(wechatProd.get(0).getWechatChannelId());
            }

            BizTmp bizTmpWechatMchnt = initBizTmpByCreate(mchntBaseInfo, wechatInfo.getId(),
                    JSONObject.toJSONString(wechatInfo), TableNameConstant.T_B_WECHAT_MCHNT_INFO,
                    auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
            bizTmpWechatMchnt.setAuditStatus(auditStatus);
            totalBizTmpList.add(bizTmpWechatMchnt);
        }
    }


    private void initMchntProdInfoByCreateCommit(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus,
                                                 List<MchntProdInfo> totalMchntProdInfoList, List<MchntFeeInfo> totalFeeInfoList,
                                                 List<MchntStageInfo> totalStageInfoList, List<MchntAuthCtrl> totalAuthCtrlList,
                                                 List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd) throws Exception {
        XmlTreeUtil xmlTreeUtil = new XmlTreeUtil();
        String instId = xmlTreeUtil.getXmlTreeStringValue(TreeNodeConstant.INST_ID);
        //若产品编码为自定义产品，则填00-基础产品  否则填01-标准产品
        String prodType = DEFAULT_PROD_CODE.equals(request.getProdCode()) ? BASE_PROD_TYPE : NORM_PROD_TYPE;

        MchntProdInfo mchntProdInfo;//之前没有保存数据，现在初始化数据
        mchntProdInfo = InitParamUtil.initMchntProdInfoByCreate(request, facadeBaseProd, auditStatus, createTime);
        if (DEFAULT_PROD_CODE.equals(request.getProdCode())) {
            BaseProdInfoMapper baseProdInfoMapper = new BaseProdInfoMapperImpl();
            BaseProdInfo baseProdInfo = baseProdInfoMapper.selectBaseProdInfoByPrimaryKey(instId, facadeBaseProd.getBaseProdCode());
            if (StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                mchntProdInfo.setWechatChannelId(baseProdInfo.getWechatChannelId());
            }

            if (StringUtil.isEmptyOrNull(request.getAlipayChannelId())) {
                mchntProdInfo.setAlipayChannelId(baseProdInfo.getAlipayChannelId());
            }
        } else {
            ProdInfoMapper prodInfoMapper = new ProdInfoMapperImpl();
            ProdInfo prodInfo = prodInfoMapper.selectProdInfoByPrimaryKey(instId, request.getProdCode(), facadeBaseProd.getBaseProdCode());
            if (StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                mchntProdInfo.setWechatChannelId(prodInfo.getWechatChannelId());
            }

            if (StringUtil.isEmptyOrNull(request.getAlipayChannelId())) {
                mchntProdInfo.setAlipayChannelId(prodInfo.getAlipayChannelId());
            }
        }


        BizTmp bizTmpProdInfo = initBizTmpByCreate(mchntBaseInfo, mchntProdInfo.getId(), JSONObject.toJSONString(mchntProdInfo),
                TableNameConstant.T_B_MCHNT_PROD_INFO, auditStatus,
                BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
        totalBizTmpList.add(bizTmpProdInfo);

        totalMchntProdInfoList.add(mchntProdInfo);


        if (CollectionUtils.isEmpty(facadeBaseProd.getMchntFeeInfoBeanList())) {
            //不传入商户费率信息，则通过标准产品的费率信息或基础产品的费率信息初始化商户费率信息
            initMchntFeeInfoByProdFeeInfo(request, mchntBaseInfo, createTime, auditStatus, totalFeeInfoList, totalBizTmpList, facadeBaseProd, instId, prodType);
        } else {
            //初始化 商户产品信息数据，商户分期信息数据，商户费率信息数据，商户权限信息数据
            initMchntFeeInfo(request, mchntBaseInfo, createTime, auditStatus, totalFeeInfoList, totalBizTmpList, facadeBaseProd);
        }


        /*  按产品权限信息初始化商户权限 */
        if (CollectionUtils.isEmpty(facadeBaseProd.getMchntAuthCtrlInfoBeanList())) {
            //不传入商户权限信息，则通过标准产品的权限信息或基础产品的权限信息初始化商户权限信息
            initMchntAuthCtrlByProdAuthInfo(request, mchntBaseInfo, createTime, auditStatus, totalAuthCtrlList, totalBizTmpList, facadeBaseProd, instId, prodType);
        } else {
            initMchntAuthCtrlInfo(request, mchntBaseInfo, createTime, auditStatus, totalAuthCtrlList, totalBizTmpList, facadeBaseProd);
        }

        /* 按产品分期信息初始化商户分期 */
        if (CollectionUtils.isEmpty(facadeBaseProd.getMchntStageInfoBeanList())) {
            initMchntStageInfoByProdStageInfo(request, mchntBaseInfo, createTime, auditStatus, totalStageInfoList, totalBizTmpList, facadeBaseProd, instId, prodType);
        } else {
            initMchntStageInfo(request, mchntBaseInfo, createTime, auditStatus, totalStageInfoList, totalBizTmpList, facadeBaseProd);
        }
    }

    private void initMchntStageInfoByProdStageInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntStageInfo> totalStageInfoList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd, String instId, String prodType) throws Exception {
        List<ProdStageInfo> prodStageInfoList;
        ProdStageInfoMapper prodStageInfoMapper = new ProdStageInfoMapperImpl();
        if (DEFAULT_PROD_CODE.equals(request.getProdCode())) {
            prodStageInfoList = prodStageInfoMapper.selectProdStageInfoByProdType(instId, prodType, facadeBaseProd.getBaseProdCode());
        } else {
            prodStageInfoList = prodStageInfoMapper.selectProdStageInfoByProdCode(instId, prodType, facadeBaseProd.getBaseProdCode(), request.getProdCode());
        }
        if (!CollectionUtils.isEmpty(prodStageInfoList)) {
            //根据标准产品权限信息进行初始化商户权限信息
            prodStageInfoList = prodStageInfoList.stream().filter(item -> "01".equals(item.getStageStatus())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(prodStageInfoList)) {
                List<MchntStageInfo> mchntStageInfoList = prodStageInfoList.stream()
                        .map(item -> InitParamUtil.initMchntStageInfoByProdStageInfo(request, facadeBaseProd.getBaseProdCode(), item, auditStatus, createTime))
                        .collect(Collectors.toList());
                totalStageInfoList.addAll(mchntStageInfoList);
                //费率业务临时信息
                List<BizTmp> mchntStageTmpList = mchntStageInfoList.stream()
                        .map(item ->
                                initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                        TableNameConstant.T_B_MCHNT_STAGE_INFO, auditStatus,
                                        BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                        .collect(Collectors.toList());
                totalBizTmpList.addAll(mchntStageTmpList);
            }
        }
    }

    private void initMchntAuthCtrlByProdAuthInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntAuthCtrl> totalAuthCtrlList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd, String instId, String prodType) throws Exception {
        ProdAuthCtrlMapper prodAuthCtrlMapper = new ProdAuthCtrlMapperImpl();
        List<ProdAuthCtrl> prodAuthCtrlList;
        if (DEFAULT_PROD_CODE.equals(request.getProdCode())) {
            prodAuthCtrlList = prodAuthCtrlMapper.selectProdAuthCtrlInfoByBaseProdCode(instId, prodType, facadeBaseProd.getBaseProdCode());
        } else {
            prodAuthCtrlList = prodAuthCtrlMapper.selectProdAuthCtrlInfoByProdCode(instId, prodType, facadeBaseProd.getBaseProdCode(), request.getProdCode());
        }
        if (!CollectionUtils.isEmpty(prodAuthCtrlList)) {
            prodAuthCtrlList = prodAuthCtrlList.stream().filter(item -> "01".equals(item.getStatus())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(prodAuthCtrlList)) {
                //根据标准产品权限信息进行初始化商户权限信息
                List<MchntAuthCtrl> mchntAuthCtrlList = prodAuthCtrlList.stream()
                        .map(item -> InitParamUtil.initMchntAuthCtrlByProdAuthCtrl(request, facadeBaseProd.getBaseProdCode(), item, auditStatus, createTime))
                        .collect(Collectors.toList());
                totalAuthCtrlList.addAll(mchntAuthCtrlList);
                //费率业务临时信息
                List<BizTmp> mchntAuthTmpList = mchntAuthCtrlList.stream()
                        .map(item ->
                                initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                        TableNameConstant.T_B_MCHNT_AUTH_CTRL, auditStatus,
                                        BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                        .collect(Collectors.toList());
                totalBizTmpList.addAll(mchntAuthTmpList);
            }
        }
    }

    private void initMchntFeeInfoByProdFeeInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntFeeInfo> totalFeeInfoList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd, String instId, String prodType) throws Exception {
        ProdFeeInfoMapper prodFeeInfoMapper = new ProdFeeInfoMapperImpl();
        /*  按产品费率信息初始化商户费率 */
        List<ProdFeeInfo> feeInfoList;
        if (DEFAULT_PROD_CODE.equals(request.getProdCode())) {
            feeInfoList = prodFeeInfoMapper.selectProdFeeInfoByBaseProdCode(instId, prodType, facadeBaseProd.getBaseProdCode());
        } else {
            feeInfoList = prodFeeInfoMapper.selectProdFeeInfoByBaseProdCodeAndProdCode(instId, facadeBaseProd.getBaseProdCode(), request.getProdCode());
        }

        MchntFeeInfoBean onlyFeeInfoBean = request.getMchntFeeInfoBean();

        if (!CollectionUtils.isEmpty(feeInfoList)) {
            //根据标准产品费率信息进行初始化商户费率信息
            feeInfoList = feeInfoList.stream().filter(item -> "01".equals(item.getFeeStatus())).collect(Collectors.toList());
            if (!CollectionUtils.isEmpty(feeInfoList)) {
                //全产品统一费率
                if (DEFAULT_PROD_CODE.equals(request.getProdCode())
                        && null != onlyFeeInfoBean
                        && !StringUtil.isEmptyOrNull(onlyFeeInfoBean.getFeeInputMode())) {
                    List<MchntFeeInfo> mchntFeeInfoList = feeInfoList.stream()
                            .map(item -> InitParamUtil.initMchntFeeInfoByOnlyFee(request, facadeBaseProd.getBaseProdCode(), onlyFeeInfoBean, item.getFeeType(), auditStatus, createTime))
                            .collect(Collectors.toList());
                    totalFeeInfoList.addAll(mchntFeeInfoList);
                    //费率业务临时信息
                    List<BizTmp> mchntFeeInfoBizTmpList = mchntFeeInfoList.stream()
                            .map(item ->
                                    initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                            TableNameConstant.T_B_MCHNT_FEE_INFO, auditStatus,
                                            BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                            .collect(Collectors.toList());
                    totalBizTmpList.addAll(mchntFeeInfoBizTmpList);

                } else {

                    List<MchntFeeInfo> mchntFeeInfoList = feeInfoList.stream()
                            .map(item -> InitParamUtil.initMchntFeeInfoByProdFeeInfo(request, facadeBaseProd.getBaseProdCode(), item, auditStatus, createTime))
                            .collect(Collectors.toList());
                    totalFeeInfoList.addAll(mchntFeeInfoList);
                    //费率业务临时信息
                    List<BizTmp> mchntFeeInfoBizTmpList = mchntFeeInfoList.stream()
                            .map(item ->
                                    initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                            TableNameConstant.T_B_MCHNT_FEE_INFO, auditStatus,
                                            BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                            .collect(Collectors.toList());
                    totalBizTmpList.addAll(mchntFeeInfoBizTmpList);
                }
            }
        }
    }

    private AlipayMchntInfo getAlipayMchntInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String instId,
                                               String createTime, String auditStatus, List<BizTmp> totalBizTmpList,
                                               MchntSignInfo mchntSignInfo, List<MchntProdInfo> totalMchntProdInfoList) throws Exception {
        AlipayMchntInfo alipayMchntInfo;
        IndustryMapInfoMapper industryMapInfoMapper = new IndustryMapInfoMapperImpl();
        AlipayMchntInfoMapper alipayMchntInfoMapper = new AlipayMchntInfoMapperImpl();
        alipayMchntInfo = alipayMchntInfoMapper.selectAlipayMchntInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        if (null == alipayMchntInfo) {
            if (StringUtil.isEmptyOrNull(request.getAlipayChannelId())) {
                //通道费率类型
                rglog.error("产品包含支付宝交易，需要设置支付宝费率通道！");
            }

            List<IndustryMapInfo> aliIndustryList = industryMapInfoMapper.selectIndustryMapInfoByCondition(mchntBaseInfo.getIndustryType(), ChannelEnum.ALIP.getChannelType());
            if (CollectionUtils.isEmpty(aliIndustryList)) {
                rglog.error("管理商户产品信息失败,通过行业类型查询微信行业类型映射关系失败！，instId:{},mchntNo:{},industryType:{}",
                        mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getIndustryType());
                throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
            }
            alipayMchntInfo = InitParamUtil.initAlipayMchntInfoByCreate(request, mchntBaseInfo, aliIndustryList.get(0), auditStatus, createTime);
            if (StringUtil.isEmptyOrNull(request.getAlipayChannelId())) {
                List<MchntProdInfo> aliProdList = totalMchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getAlipayChannelId())).collect(Collectors.toList());
                if (CollectionUtils.isEmpty(aliProdList)) {
                    List<BizTmp> prodList = totalBizTmpList.stream().filter(item -> TableNameConstant.T_B_MCHNT_PROD_INFO.equals(item.getOprTableEname())).collect(Collectors.toList());
                    if (CollectionUtils.isEmpty(prodList)) {
                        rglog.error("管理商户产品信息失败, 支付宝费率通道为空！！，instId:{},mchntNo:{},",
                                mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo());
                        throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
                    } else {
                        List<MchntProdInfo> mchntProdInfoList = prodList.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntProdInfo.class)).collect(Collectors.toList());
                        aliProdList = mchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getAlipayChannelId())).collect(Collectors.toList());
                        if (CollectionUtils.isEmpty(aliProdList)) {
                            rglog.error("管理商户产品信息失败, 支付宝费率通道为空！！，instId:{},mchntNo:{},",
                                    mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo());
                            throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
                        }
                        alipayMchntInfo.setDstChannelType(aliProdList.get(0).getAlipayChannelId());
                    }
                }
                alipayMchntInfo.setDstChannelType(aliProdList.get(0).getAlipayChannelId());
            } else {
                alipayMchntInfo.setDstChannelType(request.getAlipayChannelId());
            }
            boolean alipayInDirectFlag = txnInfo.getChannelCallCfgList().stream().anyMatch(item ->
                    item.getCallChannelId().equals(ChannelEnum.UPAL.getChannelType()) || item.getCallChannelId().equals(ChannelEnum.NUAL.getChannelType()));
            if (!alipayInDirectFlag) {
                //支付宝直联模式，先置入驻状态为失败，商户应用授权成功后再置为入驻申请中
                alipayMchntInfo.setAlipayEntryFlag("02");
            }
            BizTmp bizTmpAlipayMchnt = initBizTmpByCreate(mchntBaseInfo, alipayMchntInfo.getId(),
                    JSONObject.toJSONString(alipayMchntInfo), TableNameConstant.T_B_ALPAY_MCHNT_INFO,
                    auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
            totalBizTmpList.add(bizTmpAlipayMchnt);
        } else {
            if (!StringUtil.isEmptyOrNull(request.getAlipayChannelId())) {
                //通道费率类型
                alipayMchntInfo.setDstChannelType(request.getAlipayChannelId());
            }

            if (StringUtil.isEmptyOrNull(alipayMchntInfo.getDstChannelType())) {
                List<MchntProdInfo> alipayProd = totalMchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getAlipayChannelId())).collect(Collectors.toList());
                alipayMchntInfo.setDstChannelType(alipayProd.get(0).getAlipayChannelId());
            }


            BizTmp bizTmpAlipayMchnt = initBizTmpByCreate(mchntBaseInfo, alipayMchntInfo.getId(),
                    JSONObject.toJSONString(alipayMchntInfo), TableNameConstant.T_B_ALPAY_MCHNT_INFO,
                    auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
            totalBizTmpList.add(bizTmpAlipayMchnt);
        }
        return alipayMchntInfo;
    }

    private WechatMchntInfo getWechatMchntInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String instId, String createTime, String auditStatus,
                                               List<BizTmp> totalBizTmpList, String appId, String appKey, String miniAppId,
                                               String miniAppKey, String independentEntryFlag, MchntSignInfo mchntSignInfo,
                                               List<MchntProdInfo> totalMchntProdInfoList) throws Exception {
        IndustryMapInfoMapper industryMapInfoMapper = new IndustryMapInfoMapperImpl();
        WechatMchntInfo wechatMchntInfo;

        WechatMchntInfoMapper wechatMchntInfoMapper = new WechatMchntInfoMapperImpl();
        wechatMchntInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntBaseInfo.getMchntNo());
        if (null == wechatMchntInfo) {
            if (StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                //通道费率类型
                rglog.error("产品包含微信交易，需要设置微信费率通道！");
            }

            //默认对公
            String publicPrivateKey = "01";
            BompMchntNatureEnum wechatType = BompMchntNatureEnum.getBompMchntNatureEnumByType(mchntBaseInfo.getMchntNature());
            if (null != wechatType) {
                //根据商户性质判断对公对私
                publicPrivateKey = wechatType.getWechatPublicPrivateKey();
            }
            IndustryMapInfo wechatIndustry = industryMapInfoMapper.selectIndustryMapInfoByIndustryTypeAndChannelType(mchntBaseInfo.getIndustryType(), ChannelEnum.WXZF.getChannelType(), publicPrivateKey);
            if (null == wechatIndustry) {
                //默认使用对公再次查询，若还查无数据则失败
                wechatIndustry = industryMapInfoMapper.selectIndustryMapInfoByIndustryTypeAndChannelType(mchntBaseInfo.getIndustryType(), ChannelEnum.WXZF.getChannelType(), "01");
                if (null == wechatIndustry) {
                    rglog.error("通过行业类型查询微信行业类型映射关系失败！，instId:{},mchntNo:{},industryType:{}",
                            mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo(), mchntBaseInfo.getIndustryType());
                    throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
                }
            }
            wechatMchntInfo = InitParamUtil.initWechatMchntInfoByCreate(request, mchntBaseInfo, wechatIndustry, appId, appKey, miniAppId, miniAppKey, independentEntryFlag, auditStatus, createTime);
            if (StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                List<MchntProdInfo> wechatProdList = totalMchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getWechatChannelId())).collect(Collectors.toList());
                if (CollectionUtils.isEmpty(wechatProdList)) {
                    List<BizTmp> prodList = totalBizTmpList.stream().filter(item -> TableNameConstant.T_B_MCHNT_PROD_INFO.equals(item.getOprTableEname())).collect(Collectors.toList());
                    if (CollectionUtils.isEmpty(prodList)) {
                        rglog.error("管理商户产品信息失败, 微信费率通道为空！！，instId:{},mchntNo:{},",
                                mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo());
                        throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
                    } else {
                        List<MchntProdInfo> mchntProdInfoList = prodList.stream().map(item -> JSON.parseObject(InitParamUtil.getJsonString(item), MchntProdInfo.class)).collect(Collectors.toList());
                        wechatProdList = mchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getWechatChannelId())).collect(Collectors.toList());
                        if (CollectionUtils.isEmpty(wechatProdList)) {
                            rglog.error("管理商户产品信息失败, 微信费率通道为空！！，instId:{},mchntNo:{},",
                                    mchntBaseInfo.getInstId(), mchntBaseInfo.getMchntNo());
                            throw new BizException(RespCodeEnum.ILLEGAL_OPERATION.getRespCode(), RespCodeEnum.ILLEGAL_OPERATION.getRespDesc());
                        }
                        wechatMchntInfo.setDstChannelType(wechatProdList.get(0).getWechatChannelId());
                    }
                } else {
                    wechatMchntInfo.setDstChannelType(wechatProdList.get(0).getWechatChannelId());
                }
            } else {
                wechatMchntInfo.setDstChannelType(request.getWechatChannelId());
            }

            if (AppParamConstant.NO.equals(independentEntryFlag) && !StringUtil.isEmptyOrNull(mchntBaseInfo.getPlatMchntNo())) {
                //平台商户下的商户，可选择不进行微信进件 使用平台商户的微信商户号及其他信息
                WechatMchntInfo platWechatInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntBaseInfo.getPlatMchntNo());
                if (null != platWechatInfo) {
                    wechatMchntInfo.setWechatMchntNo(platWechatInfo.getWechatMchntNo());
                }
            }
            BizTmp bizTmpWechatMchnt = initBizTmpByCreate(mchntBaseInfo, wechatMchntInfo.getId(),
                    JSONObject.toJSONString(wechatMchntInfo), TableNameConstant.T_B_WECHAT_MCHNT_INFO,
                    auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
            bizTmpWechatMchnt.setAuditStatus(auditStatus);
            totalBizTmpList.add(bizTmpWechatMchnt);
        } else {
            if (!StringUtil.isEmptyOrNull(appId)) {
                wechatMchntInfo.setAppId(appId);
            }
            if (!StringUtil.isEmptyOrNull(appKey)) {
                wechatMchntInfo.setAppSecretKey(appKey);
            }
            if (!StringUtil.isEmptyOrNull(miniAppId)) {
                wechatMchntInfo.setMiniAppId(miniAppId);
            }
            if (!StringUtil.isEmptyOrNull(miniAppKey)) {
                wechatMchntInfo.setMiniSecretKey(miniAppKey);
            }
            if (!StringUtil.isEmptyOrNull(request.getWechatChannelId())) {
                //通道费率类型
                wechatMchntInfo.setDstChannelType(request.getWechatChannelId());
            }

            if (AppParamConstant.NO.equals(independentEntryFlag) && !StringUtil.isEmptyOrNull(mchntBaseInfo.getPlatMchntNo())) {
                //平台商户下的商户，可选择不进行微信进件 使用平台商户的微信商户号及其他信息
                WechatMchntInfo platWechatInfo = wechatMchntInfoMapper.selectWechatMchntInfoByPrimaryKey(instId, mchntBaseInfo.getPlatMchntNo());
                if (null != platWechatInfo) {
                    wechatMchntInfo.setWechatMchntNo(platWechatInfo.getWechatMchntNo());
                }
            }

            if (StringUtil.isEmptyOrNull(wechatMchntInfo.getDstChannelType())) {
                List<MchntProdInfo> wechatProd = totalMchntProdInfoList.stream().filter(item -> !StringUtil.isEmptyOrNull(item.getWechatChannelId())).collect(Collectors.toList());
                wechatMchntInfo.setDstChannelType(wechatProd.get(0).getWechatChannelId());
            }

            BizTmp bizTmpWechatMchnt = initBizTmpByCreate(mchntBaseInfo, wechatMchntInfo.getId(),
                    JSONObject.toJSONString(wechatMchntInfo), TableNameConstant.T_B_WECHAT_MCHNT_INFO,
                    auditStatus, BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
            bizTmpWechatMchnt.setAuditStatus(auditStatus);
            totalBizTmpList.add(bizTmpWechatMchnt);
        }

        return wechatMchntInfo;
    }

    private void initMchntStageInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntStageInfo> totalStageInfoList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd) {
        List<MchntStageInfoBean> facadeStageInfoList = facadeBaseProd.getMchntStageInfoBeanList();
        if (!CollectionUtils.isEmpty(facadeStageInfoList)) {
            List<MchntStageInfo> mchntStageInfoList = facadeStageInfoList.stream()
                    .map(item -> InitParamUtil.initMchntStageInfoByCreate(request, facadeBaseProd.getBaseProdCode(), item, auditStatus, createTime))
                    .collect(Collectors.toList());
            totalStageInfoList.addAll(mchntStageInfoList);
            //分期临时信息
            List<BizTmp> mchntStageBizTmp = mchntStageInfoList.stream()
                    .map(item ->
                            initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                    TableNameConstant.T_B_MCHNT_STAGE_INFO, auditStatus,
                                    BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                    .collect(Collectors.toList());
            totalBizTmpList.addAll(mchntStageBizTmp);
        }
    }

    private void initMchntAuthCtrlInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntAuthCtrl> totalAuthCtrlList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd) {
        List<MchntAuthCtrlInfoBean> facadeAuthCtrlList = facadeBaseProd.getMchntAuthCtrlInfoBeanList();
        if (!CollectionUtils.isEmpty(facadeAuthCtrlList)) {
            List<MchntAuthCtrl> mchntAuthCtrlList = facadeAuthCtrlList.stream()
                    .map(item -> InitParamUtil.initMchntAuthCtrlByCreate(request, facadeBaseProd.getBaseProdCode(), item, auditStatus, createTime))
                    .collect(Collectors.toList());
            totalAuthCtrlList.addAll(mchntAuthCtrlList);
            //业务权限临时信息
            List<BizTmp> mchntAuthCtrlBizTmp = mchntAuthCtrlList.stream()
                    .map(item ->
                            initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                    TableNameConstant.T_B_MCHNT_AUTH_CTRL, auditStatus,
                                    BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                    .collect(Collectors.toList());
            totalBizTmpList.addAll(mchntAuthCtrlBizTmp);
        }
    }

    private void initMchntFeeInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntFeeInfo> totalFeeInfoList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd) throws Exception {
        List<MchntFeeInfoBean> facadeFeeInfoList = facadeBaseProd.getMchntFeeInfoBeanList();
        MchntFeeInfoBean mchntFeeInfoBean = request.getMchntFeeInfoBean();
        if ("DF".equals(request.getProdCode()) && null != mchntFeeInfoBean && !StringUtil.isEmptyOrNull(mchntFeeInfoBean.getFeeInputMode())) {
            //全产品统一费率
            MchntFeeInfo mchntFeeInfo = InitParamUtil.initMchntFeeInfoByCreate(request, facadeBaseProd.getBaseProdCode(), mchntFeeInfoBean, auditStatus, createTime);
            List<MchntFeeInfo> mchntFeeInfoList = new ArrayList<>();
            mchntFeeInfoList.add(mchntFeeInfo);
            totalFeeInfoList.addAll(mchntFeeInfoList);
            //费率业务临时信息
            List<BizTmp> mchntFeeInfoBizTmpList = mchntFeeInfoList.stream()
                    .map(item ->
                            initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                    TableNameConstant.T_B_MCHNT_FEE_INFO, auditStatus,
                                    BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                    .collect(Collectors.toList());
            totalBizTmpList.addAll(mchntFeeInfoBizTmpList);

        } else if (!CollectionUtils.isEmpty(facadeFeeInfoList)) {
            List<MchntFeeInfo> mchntFeeInfoList = new ArrayList<>();
            for (MchntFeeInfoBean item : facadeBaseProd.getMchntFeeInfoBeanList()) {
                MchntFeeInfo mchntFeeInfo = InitParamUtil.initMchntFeeInfoByCreate(request, facadeBaseProd.getBaseProdCode(), item, auditStatus, createTime);
                mchntFeeInfoList.add(mchntFeeInfo);
            }
            totalFeeInfoList.addAll(mchntFeeInfoList);
            //费率业务临时信息
            List<BizTmp> mchntFeeInfoBizTmpList = mchntFeeInfoList.stream()
                    .map(item ->
                            initBizTmpByCreate(mchntBaseInfo, item.getId(), JSONObject.toJSONString(item),
                                    TableNameConstant.T_B_MCHNT_FEE_INFO, auditStatus,
                                    BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N))
                    .collect(Collectors.toList());
            totalBizTmpList.addAll(mchntFeeInfoBizTmpList);

        }
    }

    private void initMchntProdInfo(MchntProdInfoManageRequest request, MchntBaseInfo mchntBaseInfo, String createTime, String auditStatus, List<MchntProdInfo> totalMchntProdInfoList, List<BizTmp> totalBizTmpList, BaseProdBean facadeBaseProd) {
        MchntProdInfo mchntProdInfo = InitParamUtil.initMchntProdInfoByCreate(request, facadeBaseProd, auditStatus, createTime);
        totalMchntProdInfoList.add(mchntProdInfo);
        BizTmp bizTmpProdInfo = initBizTmpByCreate(mchntBaseInfo, mchntProdInfo.getId(), JSONObject.toJSONString(mchntProdInfo),
                TableNameConstant.T_B_MCHNT_PROD_INFO, auditStatus,
                BompAppParamConstant.FLAG_N, BompAppParamConstant.FLAG_N);
        totalBizTmpList.add(bizTmpProdInfo);
    }

    private BizHistory initBizHistoryByCreate(BizTmp bizTmp, String bizData, String createTime) {
        BizHistory bizHistory = new BizHistory();
        BeanUtil.beanCopy(bizTmp, bizHistory);
        InitParamUtil.initBizHistoryData(bizHistory, bizData);
        bizHistory.setCreateTime(createTime);
        return bizHistory;
    }


    @Override
    protected void bizAfterCust(Object response) throws Exception {
        BizResponse bizResponse = (BizResponse) response;
        MchntProdInfoManageResponse manageResponse = (MchntProdInfoManageResponse) bizResponse.getResult();
        ConvertUtil.convertInput(manageResponse);
    }


    private BizTmp initBizTmpByCreate(MchntBaseInfo mchntBaseInfo,
                                      String id,
                                      String jsonString,
                                      String tableName,
                                      String auditStatus,
                                      String masterShowFlag,
                                      String detailFlag) {
        BizTmp bizTmp = new BizTmp();
        try {
            ConvertUtil.convertOutput(bizTmp);
        } catch (Exception e) {
            rglog.error("ConvertUtil异常：{}", e.toString());
        } finally {
            BeanUtil.beanCopy(mchntBaseInfo, bizTmp);
            bizTmp.setManageInstId(mchntBaseInfo.getSignInstId());
            bizTmp.setMchntName(mchntBaseInfo.getMchntName());
            bizTmp.setRealId(id);
            bizTmp.setOprTableEname(tableName);
            //状态非正式
            bizTmp.setBizStatus(BizTmpStatusEnum.NO_NORMAL.getType());
            //新增
            bizTmp.setBizOpr("I");
            bizTmp.setAuditStatus(auditStatus);
            //主记录标识
            bizTmp.setDetailFlag(detailFlag);
            bizTmp.setMasterShowFlag(masterShowFlag);
            bizTmp.setMasterKey(mchntBaseInfo.getId());
            InitParamUtil.initBizTempData(bizTmp, jsonString);
        }
        return bizTmp;
    }
}
